2014-03-04 435 views
3

事情沒有發生,因爲我相信他們應該這樣做,下面的代碼是我正在做的一件事。我創建一個arrayList然後添加一個整數數組。然後,我將一個新構建的整數數組分配給我的數組列表的第一個元素。然後我改變構造的整數數組的值。我輸出arrayList元素和整數數組,它們是相同的值,這不應該發生。更改整數數組更改ArrayList的值

ArrayList<int[]> path = new ArrayList<int[]>(); 
int loc2[] = {0,0}; 

path.add(loc2); 

int loc[]; 

loc = path.get(0); 

loc[0] += 1; 

System.out.println(loc[0]); 
System.out.println(path.get(0)[0]); 

兩條線的代碼的系統輸出不應該是相同的,但它是。

我是在做一些徹底的錯誤或者我只是誤解了我正在做的事情?

+0

'這不應該發生。'爲什麼不呢?他們是相同的對象 – njzk2

+0

如果你看看引用,loc2 == loc == path.get(0) – njzk2

回答

2

它們通過引用進行了更改。

你分配給loc的只是loc2的「地址」。 所以無論你在做什麼locloc2發生,因爲他們有相同的「地址」。

你需要做的是使用基本循環到deep copyloc2loc。例如:

public int[] copyArr(int[] arr) { 
     int length = arr.length; 
     int[] newArr = new int[length]; 

     for (int i = 0; i < length; i++) { 
     newArr[i] = arr[i]; 
     } 

     return newArr; 
} 
1

您正在處理對同一實際整數數組的引用。您有效地將'loc2'拉回並分配給'loc'。

如果您處理'loc2','loc'或使用path.get(0),它們是相同的整數數組,包含您在創建'loc2'時所創建的第一組值。

如果你想得到一個副本並且在你的ArrayList中修改你的原始數組而不用修改它。您需要創建一個新的Array對象,將值複製到您想要的值中,然後使用它。

你可以看看使用System.arraycopy()。請參閱Make copy of array Java