java.util.Calendar.clone()返回"...具有相同属性的新日历"并返回"此日历的浅表副本".
为回答这并不似乎是一个浅拷贝这里的SO.这个问题被标记为与语言无关, Java似乎不遵循语言无关的定义.当我单步执行代码时,我注意到结构和元素被复制到这个新对象,而不仅仅是语言无关的结构.
在Java中,什么是浅拷贝?
它与Java深层副本(如果存在)有何不同?
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());
Run Code Online (Sandbox Code Playgroud)
我读过 clone() 方法实际上是一种浅拷贝。因此,我假设当 P3 中某个字段的值发生变化时,P1 中的值也会发生变化。但是,那没有发生。我在这里缺少什么?