所以我正在进行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] ++,我认为它只会添加,但它没有。为什么最后一个增量不包含在输出中?
答案 0 :(得分:3)
list = new int[4];
最后一行增加了不同数组中的元素。
答案 1 :(得分:0)
list = new int[4];
这改变了本地参考list
地址。
但是,vals保留了旧地址。
所以,最后一次增量完成到一个新数组。并且vals保留了旧数组的操作。
答案 2 :(得分:0)
当您致电fun(vals)
时,本地变量list
指向vals
的位置。但是,在创建新数组之后,局部变量list
现在指向一个完全不同的内存块(尽管引用本身仍然在内存中的相同位置)。