【发布时间】:2015-07-19 01:15:13
【问题描述】:
我正在创建 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]
【问题讨论】:
-
你的问题是什么?
-
我在 foo 方法中将元素添加到 l2 之后,我在 Main 方法中打印 l1。无论我添加到 l2 中的什么都能够在 l1 中检索。我想知道它在编译器中是如何工作的。这是传递引用。
-
实际上,您可以将原语视为按值传递,将对象视为按引用传递。
-
@SteveChaloner:不,我会说这是一个非常糟糕的主意。它鼓励各种不正确的心理建模 - 如果他们后来使用具有 real 传递引用的语言,肯定会使 OP 感到困惑。所需要的只是理解
l1的值是一个引用,而不是一个对象,并且你根本不需要改变“通过引用传递”的含义。
标签: java list pass-by-reference