java 传值与传引用小例子
2017-09-11 15:37
190 查看
java 传值与传引用小例子
java传值、传引用傻傻分不清,今天写了一个小例子,实践一下加深印象。先上结论:
首先不管传啥,java都是传的副本
对于基本类型变量 (int、long、double、float、byte、boolean、char),java传值的副本(相当于影分身之术)
对于对象型变量(对象、数组),java传引用的副本(相当于仓库钥匙复制一份,但指向的还是仓库本身)
/* * 传值与传引用小例子 * ps:这个小例子用到了重载 * @author: lijialin * */ public class Main { /* * x是int,int是基本型 * 对于基本型,java传值的副本,即使副本改变,自己依然不变 * 相当于影分身之术 * 所以,x只是在方法的内部改变了,不影响方法外的x值 */ static void change(int x) { ++x; } /* * 对于数组类型,传引用的副本,引用的副本也是指向自己的 * 相当于把钥匙复制了一份,传到方法里。然后方法体根据钥匙打开仓库,修改仓库里的值 * 所以,通过引用的副本改变了数组的值,这个改在方法结束后依然有效 */ static void change(char[] arr) { arr[0] = 'z'; } /* * String有点特殊,在执行str = "aaa"; 时,由于String是final的 * 因此需要jvm重现创建一个值是"aaa"String对象 * 然后把这个对象的引用赋值给str * 相当于让str重新向"aaa" * 当方法结束,str的作用消失,依旧指向原来的字符串 */ static void change(String str) { str = "aaa"; } /* * 对于StringBuilder类型,传递引用的副本 * 另外,StringBuilder产生一块内存空间,对它的增、删、该 * 都在这块内存中进行 */ static void change(StringBuilder sb) { sb.append("aaa"); } public static void main(String[] args) { // Test1 int x = 0; change(x); System.out.println(x); // Test2 char[] arr = {'a','b','c'}; change(arr); System.out.println(arr); // Test3 String s = "abc"; change(s); System.out.println(s); // Test4 StringBuilder sb = new StringBuilder("abc"); change(sb); System.out.println(sb); } }
相关文章推荐
- java引用类型参数传值的两个很好的例子
- PHP中传值与传引用的区别 举一个例子!
- java 传值时可分为值传递与引用传递,那么他们有和区别
- Java中的形参和实参的区别以及传值调用和传引用调用
- 验证java引用的小例子
- java传引用还是传值的问题
- Java经典问题:传值与传引用?
- Java中的形参和实参的区别以及传值调用和传引用调用
- Java中传值与传引用
- Java的四种引用源代码例子
- Java到底是传引用还是传值?
- android中引用javascript和在javascript中引用java的简单例子
- java到底有没有引用传值
- java中的参数传递为引用传递还是传值传递
- Java到底是传引用还是传值?
- 【Java笔记】引用类型的参数传值
- Java到底是传引用还是传值?
- Java经典问题:传值与传引用?
- Java方法中传值和引用传递的问题(转)
- Java经典问题:传值与传引用