关于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(); } }