对象是互相引用的,即对象中可能包含了另外一个对象的引用html
浅克隆:一般只是对克隆的实例进行复制,但里面的其余子对象,都是共用;java
深克隆:克隆的时候会复制它的子对象的引用,里面全部的变量和子对象都是又额外拷贝了一份。this
## 若是实现深克隆code
一个方法天然是重写clone方法,添加如order.items=(LineItems)items.clone()的语句,也就是人为地添加对引用对象的复制。 这个方法的缺点是若是引用对象有不少,或者说引用套引用不少重,那么太麻烦了。 业界经常使用的方法是使用串行化而后反串行化的方法来实现深克隆。因为串行化后,对象写到流中,全部引用的对象都包含进来了,因此反串行化后,对等于生成了一个彻底克隆的对象。 这个方法的要求是对象(包括被引用对象)必须事先了Serializable接口,不然就要用transient关键字将其排除在复制过程当中。htm
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(); }