深克隆与浅克隆的区别
对象是互相引用的,即对象中可能包含了另一个对象的引用
浅克隆:通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用;
深克隆:克隆的时候会复制它的子对象的引用,里面所有的变量和子对象都是又额外拷贝了一份。
## 如果实现深克隆
一个方法自然是重写clone方法,添加如order.items=(LineItems)items.clone()的语句,也就是人为地添加对引用对象的复制。 这个方法的缺点是如果引用对象有很多,或者说引用套引用很多重,那么太麻烦了。 业界常用的方法是使用串行化然后反串行化的方法来实现深克隆。由于串行化后,对象写到流中,所有引用的对象都包含进来了,所以反串行化后,对等于生成了一个完全克隆的对象。 这个方法的要求是对象(包括被引用对象)必须事先了Serializable接口,否则就要用transient关键字将其排除在复制过程中。
public Object deepClone() throws IOException,ClassNotFoundException {
//将对象写到流里
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
//从流里读回来
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
http://www.cnblogs.com/xing901022/p/4051097.html