Java List 的引用传递问题

Java pass by reference issue with List

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

看下面的代码

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]

As we know that Java doesn't support Pass-By-Reference but here its giving different results.

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

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

该方法然后使用此引用来修改原始列表,这就是您在 "the outside" 上也看到更改的原因。

Is Java "pass-by-reference" or "pass-by-value"?