Javaオブジェクトは、(オブジェクトのコピーが)別の碁の同じ型を持つオブジェクトのクラスにコピーされたオブジェクトのすべての属性(メンバ変数)を指しコピーします。たとえば、次の場合は、AおよびBは、特性およびBを有する、クラスSに属する両方のオブジェクト。次に、オブジェクトAのコピー操作は、オブジェクトBに割り当てられている:のBa = Aaと; Bbの=アブ。
プログラム内のコピー先は、主に一部または新しいコンテキスト内で多重化既存のオブジェクトデータのすべてに、共通です。
浅いコピー(シャローコピー)、深いコピー(ディープコピー):コピーを分けることができ、Javaでオブジェクト。
小さな伏線の知識を紹介:Javaデータ型は、基本データ型と参照データの種類に分けられます。メソッドパラメータまたは戻り値として使用されるとき割り当て動作を行うデータの種類、両方に、差分値が送信されると、参照(アドレス)が送信さが存在することになります。
浅いコピー(シャローコピー)
-
データ型は、浅いコピーを新しいコピーに、直接オブジェクトの、すなわち属性値を値を転送し、基本データ型のメンバー変数です。オブジェクトのメンバ変数は、値を修正するれた二つの異なるデータが、オブジェクトの別のコピーが得られたデータに影響を与えないからです。
-
データ・タイプのためのそのようなメンバ変数として参照データメンバ変数の型が配列、例えばクラスのようなオブジェクトであるので、浅いコピーを参照、つまり、メンバ変数(メモリアドレス)コピーの参考値を通過します新しいオブジェクトのための1つ。実際には二つのオブジェクトのメンバ変数は、同じインスタンスを指しているので。この場合、オブジェクトのメンバ変数の変更に別のオブジェクトのメンバ変数の値に影響を与えます。
方法:
-
- 参照によって割り当て。
- cloneメソッドをオーバーライドします。
深いコピー(ディープコピー)
- ディープコピーのオブジェクトをコピーするだけでなく、メンバー変数アプリケーションとしてすべての基本データ型に限らず、ストレージ・スペースのタイプへのすべての参照であり、コピーは、オブジェクト到達内のすべてのオブジェクトまで、各レファレンスタイプによって参照されるオブジェクト。
方法:
-
各基準オブジェクトメソッドオーバーライドクローンについて
、同一の基本的な考え方の浅いコピーを書き換えることによって実現クローン方法、図中の各レイヤ内の各オブジェクトのための唯一の目的は、Cloneableインタフェースを実装し、クローンメソッドをオーバーライドし、最後に最上位レベルでディープコピーを達成するために、クラスのcloneメソッドをオーバーライドするcloneメソッドのすべての呼び出します。簡単に言えば:各レイヤー内のすべてのオブジェクトは、浅いコピーです -
オブジェクトのシリアライズは、ディープコピーによって達成
後、ディープコピーバイトのシーケンスに標的配列、デフォルトのオブジェクト参照オブジェクトのシリアル化は、完全に逆の順序で実現したとき。