-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