浅拷贝与深拷贝

浅拷贝

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

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


自带的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