我正在测试Object#clone方法的行为,我不明白为什么以下代码打印为true,Diego,Diego,我期待它打印为true,Diego,Armando,因为p.getName()== p2 .getName()打印为true。可以请任何人解释为什么p2.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;
}
}
答案 0 :(得分:0)
因为那时两个引用都指向同一个String对象。但是,当您调用p2.setName时,p2的名称引用指向另一个String对象。答案由@dunni提供
要重现我想要的行为,我首先需要添加一个可变的类作为占位符(地址):
List=[]
c=1
For n in list:
If(n==list[c]):
list.pop(c)
C+=1
现在打印:
paseo de la reforma
lomas de chapultepec