Java のディープ コピー、シャロー コピー、クローンについて理解する
オブジェクトのコピーという概念は、「ディープ コピー、 " "浅いコピー" と "クローン"。 Java のコンテキストでは、「値のコピー」と「オブジェクトのコピー」を区別することが重要です。
浅いコピーと深いコピー
浅いコピーオブジェクトの最初のレベルのみがコピーされます。例:
<code class="java">Example eg1 = new Example(1, new int[]{1, 2}); Example eg2 = new Example(eg1.foo, eg1.bar); // Shallow copy</code>
この場合、eg2 の foo は 1 に設定され、bar は eg1 と同じ配列を指します。一方、深いコピーは、ネストされた子オブジェクトを含むオブジェクト グラフ全体のコピーを作成します。
<code class="java">Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar)); // Deep copy</code>
ただし、Java でのコピーの正確な深さはあいまいなままです。 「レベル」を構成するものについて明確な定義はありません。
Clone メソッド
clone メソッドはすべての Java クラスに存在し、そのコピーを作成することを目的としています。ターゲットオブジェクト。それにもかかわらず、そのセマンティクスはあいまいです:
クローンの Javadoc には、元のオブジェクトが返されるか、コピーが元のオブジェクトと等しくない可能性があると記載されています。さらに、クローンの動作は Java クラスごとに異なるため、すべてのオブジェクト タイプに対して一貫したモデルを導出することが困難になります。
結論
「シャロー コピー」という用語はJava では「ディープ コピー」、および「クローン」がよく使用されますが、その正確な意味は大きく異なる場合があります。浅いコピーはオブジェクトの最上位を複製し、深いコピーはさらに掘り下げますが、「深さ」の概念は主観的なままです。また、clone メソッドには明確な定義がないため、異なるクラス間で使用すると予期せぬ問題が発生する可能性があります。開発者は、Java オブジェクトを扱うときに、必要なコピー セマンティクスを慎重に検討する必要があります。
以上がJava の詳細: 浅いコピー、深いコピー、クローンの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。