List的引用不会被重置

时间:2013-11-21 17:11:49

标签: java

我创建了一个List并添加了2个元素。我将此List传递给方法并将列表初始化为new ArrayList()

当方法返回时,我打印列表的大小,但它仍显示2.

public class ValueChange {
    public void fun(List<Integer> l1){
        l1=new ArrayList<Integer>();
    }

    public static void main(String[] args){
        List<Integer> l1=new ArrayList<Integer>();
        l1.add(5);
        l1.add(6);
        System.out.println("Before = "+l1.size());
        ValueChange vc=new ValueChange();
        vc.fun(l1);
        System.out.println("After = "+l1.size());
    }
}

4 个答案:

答案 0 :(得分:7)

该行:

l1=new ArrayList<Integer>();
fun方法中的

实际上不会更改此方法范围之外的列表。您可以更改其中的值,但不能将新列表重新分配给参数。

这实际上是java中的常见错误。如果您想知道如何在方法中传递参数,请阅读此post

答案 1 :(得分:3)

Java使用引用值的传递值。它就像你将引用作为值传递一样。您在调用方法中所做的是通过为其分配新内存来更改形式参数的值,它不会反映在实际参数中

答案 2 :(得分:1)

由于参数的范围,这不起作用。

您要清除列表:

public void fun(List<Integer> l1){
    l1.clear();
}

正如其他答案所指出的那样。 Java的pass-by-value是导致您的问题的原因。 有关此问题的解释,请参阅THIS PAGE

答案 3 :(得分:1)

Java 按值传递 但是 它传递了引用的值。这基本上意味着如果重新分配方法参数,它不会反映在原始对象中。

当您将原始引用传递给方法时,它会复制原始引​​用,因此如果为该引用分配新值,则不会在外部看到更改。

两个引用都指向同一个对象。