配列を、以下のように単純に代入するとシャローコピーになり、配列オブジェクトへの参照がコピーされるだけになる。なので、aaa配列の中身を書き換えると、bbb配列の中身も書き換わる。
String[] aaa = {"1", "2", "3", "4"};
String[] bbb = aaa;
System.out.println(Arrays.toString(aaa));
System.out.println(Arrays.toString(bbb));
aaa[2] = "7";
System.out.println(Arrays.toString(aaa));
System.out.println(Arrays.toString(bbb));
これを、以下のようにArraysクラスのcopyOfメソッドを使うと、ディープコピーとなり、配列の中身をコピーした別のオブジェクトとしてコピーしてくれるなので、aaa配列の中身を書き換えても。bbb配列の中身は書き換わらない。
String[] aaa = {"1", "2", "3", "4"};
String[] bbb = Arrays.copyOf(aaa, aaa.length);
System.out.println(Arrays.toString(aaa));
System.out.println(Arrays.toString(bbb));
aaa[2] = "7";
System.out.println(Arrays.toString(aaa));
System.out.println(Arrays.toString(bbb));


0 コメント:
コメントを投稿