我正在尝试以下代码,
public void test() {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(89);
System.out.println(list);
update1(list);
System.out.println(list);
update2(list);
System.out.println(list);
}
public void update1(List<Integer> list) {
list.remove(0);
}
public void update2(List<Integer> list) {
list = null;
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出,
[100,89]
[89]
[89]
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么我无法在被调用的函数中将列表指定为null?
因为java中的所有方法调用都是按值传递的,这意味着在调用另一个函数时复制了引用,但这两个函数指向同一个对象.
两个指向同一对象的引用副本.
另一个例子是
public void update2(List<Integer> list) {
list = new ArrayList<>(); // The new refrence got assigned to a new object
list.add(23); // Add 23 to the new list
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段不会影响旧对象或它的引用.