1. 程式人生 > 其它 >關於Object.clone()深淺拷貝問題

關於Object.clone()深淺拷貝問題

  Object.clone()深淺拷貝問題

  淺拷貝就不說了,只看下深拷貝的兩種實現方式:第一種是給需要拷貝的引用型別也實現Cloneable介面並覆寫clone方法;第二種則是利用序列化。

  第一種:使用深拷貝Object的clone()方法是projected,所以要使用需要實現Cloneable介面,如果一個類中有很多引用型別,那麼這種方式寫起來很麻煩。

  第二種:只要使引用類繼承該DeepClone類即可。

package com.test.objclone.deep.serialize;
 
import java.io.ByteArrayInputStream;
import
java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class DeepClone implements Serializable{ private static final long serialVersionUID = 1L; /** * 利用序列化和反序列化進行物件的深拷貝 * @return * @throws Exception
*/ protected Object deepClone() throws Exception{ //序列化 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(); } }