1

所以我在做一个UIL练习测试,这个问题就出现了。

public void fun(int[] list){
list[2]++;
list[1] = list[0];
list = new int[4];
list[2]++;
}

//////////////////////////
// client code
int[] vals = {2, 7, 3};
fun(vals);
out.print( Arrays.toString(vals) );

我试了一下,得到了 [2, 2, 5] 但答案是 [2, 2, 4]。由于它只是 list[2]++,我认为它只会添加,但它没有。为什么最后一个增量没有包含在输出中?

4

3 回答 3

3
list = new int[4];

最后一行增加了不同数组中的一个元素。

于 2013-11-14T21:18:55.010 回答
0

list = new int[4];这改变了本地参考list地址。但是,vals 保留了旧地址。所以,最后一个增量完成到一个新数组。并且 vals 保留旧数组以及对其执行的操作。

于 2013-11-14T21:22:24.837 回答
0

调用fun(vals)时局部变量list是指向的位置vals。但是,在创建新数组后,局部变量list现在指向完全不同的内存块(尽管引用本身仍位于内存中的同一位置)。

于 2013-11-14T21:24:14.113 回答