Java通过引用问题传递List

时间:2015-05-08 07:41:34

标签: java list pass-by-reference

我正在创建ArrayList l1并将l1引用传递给方法foo。 我们知道Java不支持Pass-By-Reference,但这里给出了不同的结果。

请参阅以下代码

public static void main(String[] args) {
    List l1 = new ArrayList(Arrays.asList(4,6,7,8));
    System.out.println("Printing list before method calling:"+ l1);
    foo(l1);
    System.out.println("Printing list after method calling:"+l1);
}

public static void foo(List l2) {
    l2.add("done"); // adding elements to l2 not l1
    l2.add("blah");
}

输出:

Printing list before method calling:[4, 6, 7, 8]
Printing list after method calling:[4, 6, 7, 8, done, blah]

1 个答案:

答案 0 :(得分:1)

  

我们知道Java并不支持Pass-By-Reference,但这里给出了不同的结果。

显然你已经听说Java只支持按值传递。这确实是对的。但是你还必须意识到Java有引用,并且这些引用可以通过值传递。

在这种情况下,对列表的引用是传递给方法(尽管引用是按值传递的)。

然后,该方法使用此引用来修改原始列表,这就是您在"外部"同样。

请参阅Is Java "pass-by-reference" or "pass-by-value"?