class Person implements Cloneable {
String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Person clone() throws CloneNotSupportedException {
return (Person) super.clone();
}
}
Person p1 = new Person();
p1.setFirstName("P1 Sara");
Person p3 = new Person();
try {
p3 = (Person) p1.clone();
} catch (CloneNotSupportedException e) {
}
p3.setFirstName("cloned Sara");
System.out.println("P3 : " + p3.getFirstName());
System.out.println("P1: " + p1.getFirstName());
我已经阅读到clone()方法实际上是一个浅表复制。 因此,我假设当P3中的一个字段的值更改时,P1中的一个字段也将更改。 但是,那没有发生。 我在这里想念什么?
答案 0 :(得分:1)
clone()方法 实际上是浅表复制。
这是您的示例中发生的情况:
p3.setFirstName("cloned Sara")
时,引用B会更新以指向堆内存中的另一个位置。没有理由改变参考A指向的位置的值。