Java の深いコピー、浅いコピー、およびクローン
Java でオブジェクトを操作する場合、コピー セマンティクスのニュアンスを理解することが重要です。深いコピー、浅いコピー、およびクローンは、オブジェクトの複製に対するさまざまなアプローチを説明するためによく使用される用語です。
浅いコピー
浅いコピーは、オブジェクトの最も外側のレベルを複製します。 。新しいオブジェクトには個別のフィールドがありますが、それらのフィールド内に保持されている参照はすべて元のオブジェクトと共有されます。
例:
<code class="java">Example eg1 = new Example(1, new int[]{1, 2}); Example eg2 = new Example(eg1.foo, eg1.bar);</code>
この浅いコピーでは、eg2新しい foo と、eg1 と同じ bar 配列への参照があります。
ディープ コピー
ディープ コピーはオブジェクトの複数のレベルを横断し、ネストされたすべての新しいコピーを作成しますオブジェクト。新しいオブジェクトは、元のオブジェクトから完全に独立しています。
例:
<code class="java">Example eg1 = new Example(1, new int[]{1, 2}); Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar));</code>
このディープ コピーでは、eg2 には新しい foo と新しい配列 bar があります。
Clone
clone メソッドは、すべてのオブジェクトと配列に存在し、コピーを作成することを目的としています。ただし、その動作は標準化されていません。
結論
オブジェクト間の完全な独立性が必要な場合は、ディープ コピーをお勧めします。浅いコピーは、オブジェクト参照で十分な場合に適しています。 clone メソッドの動作には一貫性がないため、注意して使用する必要があります。
以上が深いコピーと浅いコピーとクローン: どの Java コピー メカニズムを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。