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"?
我正在创建 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"?