我在Java中拥有这段代码。关于在Java中克隆的困惑
public class CloneTest implements Cloneable{
String name;
int marks;
public CloneTest(String s, int i) {
name = s;
marks = i;
}
public void setName(String s) {
name = s;
}
public void setMarks(int i) {
marks = i;
}
@Override
public Object clone() {
return new CloneTest(this.name, this.marks);
}
}
我创建了这个类的一个对象,然后克隆它。现在,当我在一个对象中更改name
的值时,名称的值在另一个中保持不变。这里奇怪的是在构造函数中,我只是使用name
的简单参考,而不是为name
创建新的String
。现在,由于String
是参考类型,我预计克隆中的String
也会被更改。谁能告诉我发生了什么事?提前致谢!
编辑
代码测试
CloneTest real = new CloneTest("Molly", 22);
CloneTest clone = real.clone();
real.setName("Dolly");
我用BlueJ提供的 “检查变量” 功能来检查值。
连包装类;) – NINCOMPOOP
,如果在你的对象名的一个设置新名称获得对传入的字符串w的新引用其他对象保持参考 –
字符串不可变,当您更改它时,会引用一个新字符串 – nachokk