你这个问题我个人觉得只要你可以从内存角度去理解就能很明白的理解什么是值传递什么是引用传递。
List<String> a = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用a,在堆中初始化了一块内存存放了new的对象,然后引用a指向了该对象。
List<String> b = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用b,在堆中初始化了一块内存存放了new的对象,然后引用b指向了该对象。
b = a;
在这一步的时候很关键就是将a的引用指向了b引用,换句话说现在栈里的应用a和引用b都指向了new的第一个对象,所以我觉得是引用传递。
至于什么是值传递和什么是引用传递,其实基本数据类型一般传入方法的时候是值传递,因为基本数据类型实际就是存在栈中的,直接将值传递给了另一个变量,引用传递基本上是指对象的引用传递,而对象本身没变化只是对象的引用指向发生了变化。
然后数组和集合可以使用Arrays和Collections的算法工具类实现拷贝和复制,严禁使用循环/遍历赋值操作。
|