Javaでオブジェクトをコピーするにはどうすればいいですか?

以下のコードを考えてみましょう。

DummyBean dum = new DummyBean();
dum.setDummy("foo");
System.out.println(dum.getDummy()); // prints 'foo'

DummyBean dumtwo = dum;
System.out.println(dumtwo.getDummy()); // prints 'foo'

dum.setDummy("bar");
System.out.println(dumtwo.getDummy()); // prints 'bar' but it should print 'foo'

つまり、dumdumtwoにコピーして、dumtwoに影響を与えずにdumを変更したいのです。しかし、上記のコードではそれができません。私が dum で何かを変更すると、同じ変更が dumtwo にも起こります。

おそらく、dumtwo = dumと言ったとき、Javaは参照のみをコピーしているのでしょう。そこで、dumの新しいコピーを作成して、それをdumtwoに割り当てる方法はありませんか?

ディープコピー]1を行う必要があります。

解説 (1)

clone()についてのきちんとした説明がありますので、必要になった場合はご覧ください。

こちら:clone(Javaメソッド)

解説 (0)

そのためには、何らかの方法でオブジェクトのクローンを作る必要があります。Javaにはクローンを作る仕組みがありますが、必要がなければ使わないでください。コピーの仕事をしてくれるコピー・メソッドを作って、それを実行してください。

dumtwo = dum.copy();

コピーを実現するためのさまざまなテクニックについては、こちらに詳しいアドバイスがあります。

解説 (0)