ホームページ  >  記事  >  Java  >  Java のディープ コピー、シャロー コピー、クローン: 違いは何ですか? それぞれをいつ使用する必要がありますか?

Java のディープ コピー、シャロー コピー、クローン: 違いは何ですか? それぞれをいつ使用する必要がありますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 12:49:30722ブラウズ

 Deep Copy vs. Shallow Copy vs. Clone in Java: What's the Difference and When Should I Use Each?

Java の深いコピー、浅いコピー、クローン

Java では、「深いコピー」、「浅いコピー」、および「 「クローン」は頻繁に使用されますが、定義が不十分な用語です。それぞれの概念を正しく理解するには、明確にする必要があります。

値のコピーとオブジェクトのコピー

コピーの種類について説明する前に、値のコピーを区別することが重要です。 > と をコピーしていますオブジェクト:

  • 値のコピー: 参照型の値のコピーには、整数のコピーと同様に、オブジェクト参照の割り当てが含まれます。
  • オブジェクトのコピー: 独自の ID を持つ新しいオブジェクトを作成するには、「new」を明示的に使用するか、

オブジェクトの浅いコピーと深いコピー

  • 浅いコピー: 新しいオブジェクトは、元の値と同じ値ですが、埋め込みオブジェクトへの参照は共有。
  • ディープ コピー: 新しいオブジェクトは元のオブジェクトと同じ値で作成されますが、埋め込みオブジェクトへの参照もコピーされるため、オブジェクト ネットワーク全体が完全に複製されます。

次の例を考えてみましょう。

<code class="java">class Example {
  int foo;
  int[] bar;
  ...
}

Example eg1 = new Example(1, new int[]{1, 2});
Example eg2 = ...</code>

eg1 の浅いコピーは次のようになります。

<code class="java">Example eg2 = new Example(eg1.foo, eg1.bar);</code>

eg1 のディープ コピーは次のようになります。

<code class="java">Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar));</code>

クローン

シャロー コピーやディープ コピーとは異なり、クローンはこのメソッドはすべての Java クラスと配列で使用できます。ただし、次の点に注意することが重要です。

  • クローンの仕様では、浅いコピーを生成するか深いコピーを生成するかは定義されていません。
  • クローンは必ずしも新しいオブジェクトを作成するわけではありません。
  • クローンのセマンティクスはクラスによって大きく異なる場合があります。

したがって、クローンを使用すると、

結論

これらの用語は Java で頻繁に使用されますが、その定義は大きく異なる場合があります。オブジェクトを正確に複製するには、浅いコピー、深いコピー、クローンのニュアンスを理解することが重要です。クローンの制限を念頭に置き、慎重に取り組むことも重要です。

以上がJava のディープ コピー、シャロー コピー、クローン: 違いは何ですか? それぞれをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。