普通拷贝只拷贝该对象的字段值,该对象里引用的其他对象不进行拷贝,保留原来的引用。所以需要深拷贝。
public class Car implements Cloneable {
private String name;
public Car(String name) {
this.name = name;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Person implements Cloneable {
private String name;
private Car car;
public Person(String name, Car car) {
this.name = name;
this.car = car;
}
public Object clone() throws CloneNotSupportedException {
Person p = (Person)super.clone();
p.car = (Car)car.clone();
return p;
}
public static void main(String[] args) throws Exception {
Car car = new Car("aodi");
Person p1 = new Person("lihao", car);
System.out.println("car hashcode:" + car.hashCode());
Person p2 = (Person)p1.clone();
System.out.println("p1 hashcode:" + p1.hashCode());
System.out.println("p2's car hashcode:" + p2.car.hashCode());
System.out.println("p2 hashcode:" + p2.hashCode());
}
}