關於Object.clone()深淺拷貝問題
阿新 • • 發佈:2022-01-02
淺拷貝就不說了,只看下深拷貝的兩種實現方式:第一種是給需要拷貝的引用型別也實現Cloneable介面並覆寫clone方法;第二種則是利用序列化。
第一種:使用深拷貝Object的clone()方法是projected,所以要使用需要實現Cloneable介面,如果一個類中有很多引用型別,那麼這種方式寫起來很麻煩。
第二種:只要使引用類繼承該DeepClone類即可。
package com.test.objclone.deep.serialize; import java.io.ByteArrayInputStream; importjava.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(); } }