-1
我正在測試對象#克隆方法的行爲,我不明白爲什麼下面的代碼打印真實,迭戈,迭戈,我期待它打印真正的迭戈,阿曼多自p.getName()== p2。 getName()打印真實。任何人都可以請任何人解釋爲什麼p2.setName(「Armando」)不修改p對象,如果他們指向相同的字符串?謝謝。Java對象#克隆行爲?
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.setName("Diego");
Person p2 = null;
try {
p2 = (Person) p.clonar();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println(p.getName() == p2.getName());
System.out.println(p.getName());
p2.setName("Armando");
System.out.println(p.getName());
}
}
class Person implements Cloneable {
private String name;
public Object clonar() throws CloneNotSupportedException {
return this.clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
您設置的'p2',不'p'的名稱,這樣的名字沒有改變... – Li357
但正如我理解C單獨的方法使淺拷貝,因此兩個對象指向相同的字符串 –
一個對象不等於它的克隆,所以'p2!= p'。因此,設置'p2'的名字不會影響'p'的名字。 – Li357