一个类的拷贝构造方法使用一个已知实例对新创建实例的成员变量逐个赋值,这种方法称为浅拷贝。
当对象的成员变量是基本数据类型时,两个对象的成员变量是已有存储空间,赋值运算传递值,所以浅拷贝能够复制实例。
但当对象的成员变量是引用类型时,浅拷贝只能让两个对象指向同一块堆空间,会造成混乱,此时浅拷贝失效,需要深拷贝。
所谓深拷贝,就是当进行拷贝的时候,为新的对象新申请一块堆空间。
例如:
public class Person {
String name;
Date birthday;
public Person(String name,Date birthday)
{
this.name = name;
this.birthday = birthday;
}
/*浅拷贝
public Person(Person p)
{
this(p.name, p.birthday);
}
*/
//深拷贝
public Person(Person p)
{
this(p.name,new Date(p.birthday))
}
}