Shallow Copy & Deep Copy

■Overview
Javaには、オブジェクトのクローンと呼ばれる、オブジェクトのコピーメカニズムがある。
オブジェクトのコピーは、Shallow CopyとDeep Copyの2通りある。

■Shallow Copy
オブジェクトのbit-wiseなコピー。
newOject(コピー生成された新しいオブジェクト)は、originalObject(コピー元のオブジェクト)と同じ値を保持する。
originalObjectに、他のオブジェクトを参照するフィールドがあった場合、その参照値だけがnewObjectにコピーされる。
つまり、
originalObjetのそのフィールドと、newObjectのそのフィールドは、同じオブジェクトを参照する。

■Deep Copy
オブジェクトの完全なコピー。
originalObjetが、他のオブジェクトを参照する場合、参照先のオブジェクトもクローンが生成される。
つまり、
Deep Copyはプリミティブ値のコピーのみならず、サブオブジェクト(originalObjetが参照するオブジェクト)をも同様にコピーする。

■Tips For Deep Copy
Objectが提供するclone()は、ただのシャローコピー。
ディープコピーしたい場合は、自分で小細工する必要がある。
小細工しても、それを継承したクラスがきちんとオーバーライドせんことには、ディープコピーにならんことも。
と、まぁ、いろいろディープコピーはメンドウ。
ゆう時は、シリアライズが便利。
シリアライザブルをimplementsすれば、万事解決。
ただ、パフォーマンスクリティカルなケースは、きちんと考慮して選択すべし。

詳細は、記事参照。


ref:
What is shallow copy and deep copy in Java?
http://www.coders2020.com/what-is-shallow-copy-and-deep-copy-in-java
Java Tip 76: An alternative to the deep copy technique
http://www.javaworld.com/javaworld/javatips/jw-javatip76.html

What is shallow copy and deep copy in Java?

Java provides a mechanism for creating copies of objects called cloning. There are two ways to make a copy of an object called shallow copy and deep copy.
Shallow copy is a bit-wise copy of an object. A new object is created that has an exact copy of the values in the original object. If any of the fields of the object are references to other objects, just the references are copied. Thus, if the object you are copying contains references to yet other objects, a shallow copy refers to the same subobjects.
Deep copy is a complete duplicate copy of an object. If an object has references to other objects, complete new copies of those objects are also made. A deep copy generates a copy not only of the primitive values of the original object, but copies of all subobjects as well, all the way to the bottom. If you need a true, complete copy of the original object, then you will need to implement a full deep copy for the object.
Java supports shallow and deep copy with the Cloneable interface to create copies of objects. To make a clone of a Java object, you declare that an object implements Cloneable, and then provide an override of the clone method of the standard Java Object base class. Implementing Cloneable tells the java compiler that your object is Cloneable. The cloning is actually done by the clone method.

2009-06-22 05:43 : __lang__java : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud