2010年11月11日木曜日

[Java] 配列をディープコピーする

Javaで配列をコピーする時に、ディープコピーが必要なのに、シャローコピーをしていて、複数のオブジェクトが全て同じ参照になってしまい、ハマったのでディープコピーする方法を残しておく。
配列を、以下のように単純に代入するとシャローコピーになり、配列オブジェクトへの参照がコピーされるだけになる。なので、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 コメント:

コメントを投稿