在 Effective 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()
是算法规范(用简单的语言),那就太好了。