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

 

posted @ 2022-01-02 18:07  jingyi_up  阅读(111)  评论(0编辑  收藏  举报