美文网首页
Java深拷贝

Java深拷贝

作者: 倾倒的吞天壶 | 来源:发表于2018-08-06 10:54 被阅读6次

    Java对于对象(包括字符串,这点和Swift不同)默认是浅拷贝,体现在直接赋值操作和集合添加操作中,如果要进行深拷贝,可用序列化来实现:

      public class CloneUtils {
            @SuppressWarnings("unchecked")
            public static <T extends Serializable> T clone(T   obj){
                T cloneObj = null;
                try {
                    //写入字节流
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    ObjectOutputStream obs = new   ObjectOutputStream(out);
                    obs.writeObject(obj);
                    obs.close();
    
                    //分配内存,写入原始对象,生成新对象
                    ByteArrayInputStream ios = new  ByteArrayInputStream(out.toByteArray());
                    ObjectInputStream ois = new ObjectInputStream(ios);
                    //返回生成的新对象
                    cloneObj = (T) ois.readObject();
                    ois.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return cloneObj;
            }
        }
    

    记得对象类实现Serialization接口
    参考文章:渐析 java 的浅拷贝和深拷贝

    相关文章

      网友评论

          本文标题:Java深拷贝

          本文链接:https://www.haomeiwen.com/subject/kfywvftx.html