Java1前書きJavaでオブジェクトをコピーしたい場合は、シャローコピーとディープコピーの2つの方法で検討する必要があります。シャローコピーは、フィールド値のみをコピーする場合のアプローチであるため、コピーは元のオブジェクトに依存している可能性があります。ディープコピーアプローチでは、ツリー内のすべてのオブジェクトが確実に深くコピーされるようにします。そのため、コピーは以前に変更された可能性のある既存のオブジェクトに依存しません。この記事では、これら2つのアプローチを比較し、ディープコピーを実装するための4つの方法を学習します。Lang)を使用します。Centralで見つけることができます。3モデル異なるメソッドを比較してJavaオブジェクトをコピーするには、2つのクラスが必要です。setters}4シャローコピーシャローコピーとは、あるオブジェクトから別のオブジェクトにフィールドの値をコピーするだけのコピーです。shallowCopy__アドレスにも影響することです。不変の場合は気にしないでくださいが、そうではありません。.isEqualTo(pm.getAddress().getCountry());}5ディープコピーディープコピーは、この問題を解決するための代替手段です。その利点は、少なくともオブジェクトグラフ内の各可変オブジェクトが再帰的にコピーされることです。コピーは、以前に作成された変更可能なオブジェクトに依存していないため、シャローコピーで見たように誤って変更されることはありません。次のセクションでは、いくつかのディープコピーの実装を示し、この利点を説明します。コピーコンストラクタ最初に実装する実装はコピーコンストラクタに基づいています。結果として、それらは偶然に変更されることはありません。継承されたcloneメソッドに基づいています。して上書きする必要があります。クラスに追加しましょう。外部ライブラリ上記の例は簡単に見えますが、コンストラクタを追加したりcloneメソッドをオーバーライドしたりできない場合は、解決策として適用されないことがあります。メソッドを実装したりする場合に間に合うようにプロジェクトを完成できない場合に発生します。それで何?この場合、外部ライブラリを使うことができます。ディープコピーを実現するために、オブジェクトをシリアライズしてから、それを新しいオブジェクトにデシリアライズすることができます。いくつかの例を見てみましょう。SerializationUtils#cloneがあります。Serializable__インターフェースを実装したときにディープコピーを実行します。インターフェースを追加する必要があります。GsonによるJSONシリアライゼーション直列化するもう1つの方法は、JSON直列化を使用することです。Gsonは、オブジェクトをJSONに変換したり、その逆を行うために使用されるライブラリです。インターフェースを必要としません。よるJSONシリアライゼーションJacksonはJSONシリアライゼーションをサポートするもう一つのライブラリです。デフォルトコンストラクタをクラスに追加する必要があります。結論ディープコピーを作成するときにどの実装を使用するべきですか?最終的な決定は、コピーするクラスと、オブジェクトグラフ内のクラスを所有しているかどうかによって異なります。いつものように、このチュートリアルのための完全なコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/core-java-lang-oop[Githubでオーバー]を見つけることができます。