我正在创建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]
答案 0 :(得分:1)
我们知道Java并不支持Pass-By-Reference,但这里给出了不同的结果。
显然你已经听说Java只支持按值传递。这确实是对的。但是你还必须意识到Java有引用,并且这些引用可以通过值传递。
在这种情况下,对列表的引用是传递给方法(尽管引用是按值传递的)。
然后,该方法使用此引用来修改原始列表,这就是您在"外部"同样。