下列程序在 1 处是否会有异常,如果没有,输出是什么?是否会
运行到 2 处,如果会,输出是什么?为什么会有这样的结果?
import java.util.ArrayList;
import java.util.List;
public class TestClass {
public static void main(String args[]) {
List list = new ArrayList();
test2(list);
System.out.println(list.size()); // 1 处
test3(list);
System.out.println(list.size()); // 2 处
}
public static void test2(List list) {
list = null;
}
public static void test3(List list) {
list.add(“aaaa“);
}
}
list=null是啥意思??内存怎么变化?以及最后的结果???
不会报错:0 1
个人观点:list传递方式表面上还是值得传递,并不是地址的传递,
但是List list = new ArrayList();ArrayList的底层实现其实就是数组,所以当在调用list的方法时候 值是会传递进去的
这个问题涉及到java参数传递机制。如下:
函数test2和test3中传递的形参list均为引用,而且在test中试图改变形参引用,但是这实际上不会改变实参引用。因而函数调用结束后,list并不是null。所以不会发生异常。而test3中试图改变实参对象的属性值(添加元素),这确实会对list造成改变。所以程序最终能够正常执行到2处