所以我想做一個非常簡單的任務,取兩個相同的數組,並將第一個數組的第一個值設置爲第二個數組的最後一個值。陣列意外的行爲
下面的代碼顯示我試圖用numberArray
和duplicateArray
這樣做。然而,大部分的代碼是我試圖弄清楚爲什麼我得到一個奇怪的結果。
System.out.print("Normal array 1: ");
for (int l = 0 ; l < numberArray.length ; l++){
System.out.print(numberArray[l]);
}
System.out.print("Duplicate array 1: ");
for (int l = 0 ; l < duplicateArray.length ; l++){
System.out.print(duplicateArray[l]);
}
System.out.println();
numberArray[0] = duplicateArray[duplicateArray.length - 1];
System.out.print("Duplicate array 2: ");
for (int l = 0 ; l < duplicateArray.length ; l++){
System.out.print(duplicateArray[l]);
}
System.out.println();
System.out.print("Normal array 2: ");
for (int l = 0 ; l < numberArray.length ; l++){
System.out.print(numberArray[l]);
}
此輸出:
Normal array 1: 123
Duplicate array 1: 123
Duplicate array 2: 323
Normal array 2: 323
什麼是沒有意義的,我是,即使我推測的值設置一個對象到另一個對象,無論是正在發生變化。
我的Java的理解是這樣的:
array[x] = array2[y];
//value at index x of "array" now equals value at index y of "array 2"
//however, array2 should not be changed at all since it is just referenced in the above line of code, not mutated
我失去了很簡單的東西?我一直在絞盡腦汁想弄明白這一點。任何幫助將不勝感激。
編輯:
我已要求我提供兩個數組的聲明,所以在這裏,他們是:
int[] numberArray = {1, 2, 3};
int[] duplicateArray = numberArray;
這不應該有所作爲嗎?將一個數組設置爲另一個不應該鏈接它們(或者我認爲)。
你能提供我們這個數組的聲明嗎?我猜他們都引用同一個對象 –
你的兩個數組指向內存中的同一個數組 –
這被稱爲**別名**併發生,當兩個數組指向相同的引用。 – QBrute