为什么null赋值不在函数中工作

Kaj*_*jal 6 java list

我正在尝试以下代码,

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

Ahm*_*azy 5

因为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)

上面的代码片段不会影响旧对象或它的引用.