2013-11-14 68 views
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]。由於它只是列表[2] ++,我認爲它只是添加,但它沒有。爲什麼最後一個增量不包含在輸出中?

回答

3
list = new int[4]; 

最後一行遞增不同數組中的元素。

0

list = new int[4];這改變了本地參考list的地址。 但是,vals保留了舊地址。 所以,最後一個增量完成了一個新的數組。而vals保留了舊陣列的操作。

0

當您撥打fun(vals)時,本地變量list指向vals的位置。但是,在創建新陣列後,局部變量list現在指向完全不同的內存塊(儘管參考本身仍位於內存中的相同位置)。