前提・実現したいこと
現在javaについて学習を進めているのですが、配列に対してSystem.arraycopy
を行うとDeepコピーとなり、
コピー先の配列の要素を変更しても、コピー元の要素の値が変更されることはない
という事がテキストやwebページに記載されていました。
しかし、以下のコードではコピー元の配列の値が変更されてしまっています。
これは基本型が値のコピーを行うのに対し、オブジェクト型は参照値をコピーしているため変更されたという解釈でよろしいのでしょうか?
どうかご教授の程お願い申し上げます。
発生している問題・エラーメッセージ
array[1].num の値が20ではなく10になっている
エラーメッセージ
該当のソースコード
java
1public class Main { 2 public static void main(String[] args){ 3 Sample[] array = { 4 new Sample(10), 5 new Sample(20) 6 }; 7 Sample[] array2 = new Sample[2]; 8 System.arraycopy(array,0,array2,0,array.length); 9 array2[1].num = 10; 10 System.out.println(array[1].num); // 20ではなく10 11 System.out.println(array2[1].num); // 10 12 } 13} 14 15class Sample{ 16 int num; 17 Sample(int num){ 18 this.num = num; 19 } 20}
試したこと
public class Main {
. public static void main(String[] args){
. int[] array = {
. 10,
. 20
. };
. int[] array2 = new int [2];
. System.arraycopy(array,0,array2,0,array.length);
. array2[1] = 10;
. System.out.println(array[1]); // これは20のままでした
. }
}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/16 19:32