効果的なJavaで、著者は次のように述べています。
クラスがCloneableを実装している場合、Objectのcloneメソッドはオブジェクトのフィールドごとのコピーを返します。それ以外の場合は、CloneNotSupportedExceptionをスローします。
私が知りたいのは、フィールドごとのコピーで彼が何を意味するのかということです。クラスのメモリにXバイトがある場合、そのメモリの一部をコピーするだけだということですか?はいの場合、元のクラスのすべての値型が新しいオブジェクトにコピーされると想定できますか?
class Point implements Cloneable{
private int x;
private int y;
@Override
public Point clone() {
return (Point)super.clone();
}
}
Object.clone()
クラスのフィールドごとのコピーが何であるかというと、Point
フィールドを明示的にコピーする必要はないと思います。上記のコードは、クラスのクローンを作成するのに十分すぎるほどです。つまり、次のコードは冗長です。x
y
Point
@Override
public Point clone() {
Point newObj = (Point)super.clone();
newObj.x = this.x; //redundant
newObj.y = this.y; //redundant
}
私は正しいですか?
複製されたオブジェクトの参照は、元のオブジェクトの参照が指している場所を自動的に指すことを知っていますが、値型で具体的に何が起こるかはわかりません。誰かがObject.clone()
のアルゴリズム仕様が(簡単な言語で)何であるかを明確に述べることができれば、それは素晴らしいことです。