Java对象#克隆行为?
我正在测试Object#clone方法的行为,我不明白为什么下面的代码会打印true,Diego,Diego,我本来希望它打印true,Diego,Armando,因为p.getName()==p2。getName()打印为true。请任何人解释一下为什么。如果setName(“Armando”)指向同一个字符串,是否不修改p对象?多谢各位
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;
}
}
# 1 楼答案
因为当时两个引用都指向同一个字符串对象。但是当你打电话给p2时。setName,p2的名称引用指向另一个字符串对象。答案由@dunni提供
为了重现我想要的行为,我首先需要添加一个可变类,作为占位符(地址):
现在打印:
改革之路
洛马斯德查普特佩克酒店