首页 > 其他 > 详细

浅拷贝与深拷贝

时间:2019-10-13 14:33:03      阅读:85      评论:0      收藏:0      [点我收藏+]

浅拷贝

对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象"里面的对象"。
"里面的对象"会在原来的对象和它的副本之间共享。

引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递。


自带的copy实现浅拷贝。需要实现cloneable接口

深拷贝

不同于浅拷贝,深拷贝是一个整个独立的对象拷贝。如果我们对整个Person对象进行深拷贝,我们会对整个对象的结构都进行拷贝。


将对象序列化为字节序列后,默认会将该对象的整个对象图进行序列化,再通过反序列即可完美地实现深拷贝。

    public Object copyObject(Object object) throws IOException, ClassNotFoundException {
        //创建字节数组输出流将拷贝对象写入
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        //创建对象输出流将字节数组输出流传入直接将对象写入字节输出流
        ObjectOutputStream objectOutputStrea = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStrea.writeObject(object);

        //将刚写入的输出流转化为字节数组传入字节数组输入流
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());

        //对象输入流包装读取为一个对象
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
        return objectInputStream.readObject();
    }

浅拷贝与深拷贝

原文:https://www.cnblogs.com/loveer/p/11666299.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!