我在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