【发布时间】:2011-02-22 20:05:42
【问题描述】:
在 Effective Java 中,作者指出:
如果一个类实现了 Cloneable, 对象的克隆方法返回一个 对象的逐个字段副本; 否则它会抛出 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() 的算法规范是什么(用简单的语言),那就太好了。
【问题讨论】: