我创建了一个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());
}
}
答案 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 按值传递 但是 它传递了引用的值。这基本上意味着如果重新分配方法参数,它不会反映在原始对象中。
当您将原始引用传递给方法时,它会复制原始引用,因此如果为该引用分配新值,则不会在外部看到更改。
两个引用都指向同一个对象。