java深拷贝与浅拷贝
-
clone方法用于对象的克隆,一般想要克隆出的对象是独立的(与原有的对象是分开的)
-
深拷贝指的是该对象的成员变量(如果是可变引用)都应该克隆一份,浅拷贝指的是成员变量没有被克隆一份
clone用法:
那么我们如何克隆对象呢?无论是浅拷贝还是深拷贝都是这两步:
-
克隆的对象要实现Cloneable接口
-
重写clone方法,最好修饰成public
浅拷贝:仅仅拷贝了Person对象,而date没有拷贝!
public class Person implements Cloneable {
// 可变的成员变量
private Date date;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
深拷贝:不仅拷贝了Person对象,也拷贝了date成员变量!
public class Person implements Cloneable {
// 可变的成员变量
private Date date;
@Override
public Object clone() throws CloneNotSupportedException {
// (浅)拷贝Person对象
Person person = (Person) super.clone();
// 将可变的成员变量也拷贝
person.date = (Date) date.clone();
// 返回拷贝的对象
return person;
}
}