浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
/**
*浅克隆
*/
public class Pig implements Cloneable{
private String name;
private Date birthday;
@Override
protected Object clone() throws CloneNotSupportedException {
Pig pig = (Pig)super.clone();
return pig;
}
}
/**
*深克隆一(手动对引用对象克隆)
*/
@Override
protected Object clone() throws CloneNotSupportedException {
Pig pig = (Pig)super.clone();
pig.birthday = (Date) pig.birthday.clone(); //深克隆
return pig;
}
/**
*深克隆 二(序列化)
*/
public class Pig implements Serializable {
private String name;
private Date birthday;
protected Object deepClone() throws CloneNotSupportedException, IOException, ClassNotFoundException {
//将对象写入流中
ByteArrayOutputStream bao = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bao);
oos.writeObject(this);
//将对象从流中取出
ByteArrayInputStream bis = new ByteArrayInputStream(bao.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (ois.readObject());
}
}