Java - 配列のコピーと比較
Java Silver試験対策
前提
配列をclone()
メソッドで複製すると、新しいインスタンスが生成される。
String[] origin = new String[] {"1", "2"}; String[] reprica = origin.clone(); System.out.println("origin == reprica: " + (origin == reprica)); // 出力結果 // origin == reprica: false
参照型(Object)の場合は注意が必要
複製した配列が異なるインスタンスであることは上記で説明した通り。
ただ、その配列に含まれているオブジェクトは同一である。
String[] origin = new String[] {"1", "2"}; String[] reprica = origin.clone(); System.out.println("origin[0] == reprica[0]: " + (origin[0] == reprica[0])); // 出力結果 // origin[0] == reprica[0]: true
ここで、配列の要素がStringと違い、変更可能なオブジェクトであった場合を考える。
String[][] origin = new String[][] {{"1", "2"}, {"3", "4"}}; String[][] reprica = origin.clone(); System.out.println("origin[0] == reprica[0]: " + (origin[0] == reprica[0])); reprica[0][0] = "10"; System.out.println("reprica[0][0]: " + reprica[0][0]); System.out.println("origin[0][0]: " + origin[0][0]); // 出力結果 // origin[0] == reprica[0]: true // reprica[0][0]: 10 // origin[0][0]: 10
このように、複製した配列内の配列は同一オブジェクトの為、reprica
の配列を操作するとorigin
に影響するので注意が必要である。