2つの同一の配列をとり、最初の配列の最初の値を2番目の配列の最後の値に設定するという非常に簡単な作業を実行しようとしています。配列予期しない動作
以下のコードは、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
私には意味をなさない何でも、私はおそらく別に値1のオブジェクトを設定していますが、両方が変化しているということです。
ジャワの私の理解では、これは次のとおりです。
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
は、私は本当に簡単な何かが足りないのですか?私はこれを理解しようとしている私の頭脳をラッキングしてきた。どんな助けでも大歓迎です。
EDIT:
私は私の2つの配列の宣言を提供するように求めてきたので、ここで彼らは、次のとおりです。
int[] numberArray = {1, 2, 3};
int[] duplicateArray = numberArray;
これは、右の違いを作るべきではないのですか?ある配列を別の配列に設定すると、それらをリンクしてはいけません。
この配列の宣言を教えていただけますか?私は彼らが同じオブジェクトを参照していると思います –
両方の配列がメモリ内の同じ配列を指しています –
これは**エイリアシング**と呼ばれ、2つの配列が同じ参照を指しているときに発生します。 – QBrute