2

我有一堂Calle有 aString nombre;和 a的课int addr;。但是,clone我所做的方法给了我错误的值。

public class Calle{
    String nombre;
    int addr;

    public Object clone(){
        return this;
    }
}

Calle c1 = new Calle("a",1);
Calle c2 = c1.clone();
c2.setAddr(3);

System.out.println(c1.addr); // value wrong

为什么值不对?

4

3 回答 3

3

您的克隆方法是错误的,因为它并没有真正克隆任何东西,它只是返回相同的对象。clone应该始终是与原始对象具有相同值 的新对象。

在这种情况下,看起来您已经有了一个复制构造函数,所以只需使用它来创建新的Calle并返回它。

public Object clone(){
    return new Calle(this.nombre, this.addr);
}
于 2013-05-29T05:44:34.913 回答
2

对于您的情况,您可以使用 Object 提供的标准浅层克隆方法。只要 String 是不可变的并且将复制 int 值,就没有理由重写复制逻辑。让它可见。

public Object clone(){
    return super.clone();
}

还应该实现可克隆接口。

于 2013-05-29T05:54:48.017 回答
1

您的克隆方法是错误的,因为它并没有真正克隆任何东西,它只是返回相同的对象。

 public Object clone() throws CloneNotSupportedException{
    return super.clone();
}

这种克隆只会做浅层克隆。如果你想进行深度克隆,你需要编写你赢得的逻辑来克隆。

于 2013-05-29T05:56:23.660 回答