博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
引用拷贝、浅拷贝 和 深拷贝
阅读量:4961 次
发布时间:2019-06-12

本文共 1362 字,大约阅读时间需要 4 分钟。

引用拷贝

二者的引用是同一个对象,并没有创建出一个新的对象

因为是同一个对象的引用,所以两者改一个,另一个对象的值也随之改变

 

浅拷贝

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝

如果属性是基本类型,拷贝的就是基本类型的值;

如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。

@Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }

 

深拷贝

被拷贝对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。

那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

@Override    protected Object clone() throws CloneNotSupportedException {        Person newPerson = (Person)super.clone();        newPerson.address = (Address) newPerson.address.clone();        return newPerson;    }

 

通过对象序列化实现深拷贝

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

public class Person implements Serializable, Cloneable{    public Object deepClone()  {        try {            ByteArrayOutputStream bo= new ByteArrayOutputStream();            ObjectOutputStream os = new ObjectOutputStream(bo);            os.writeObject(this);            ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());            ObjectInputStream oi=new ObjectInputStream(bi);            return(oi.readObject());        } catch (IOException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        return null;    }}

 

转载于:https://www.cnblogs.com/jialilue/p/11311240.html

你可能感兴趣的文章
Atitit.android播放smb 网络邻居视频文件解决方案
查看>>
[转]PHP $_SERVER变量中的 HTTP_HOST 和 SERVER_NAME
查看>>
简易c语言文法
查看>>
[QA]UrlRewriter无法解析实际存在的htm文件
查看>>
记一次因为索引维护导致批量无法继续的情况
查看>>
poj 2195 (最小费用最大流)
查看>>
HCA数据下载
查看>>
Codeforces 954 G. Castle Defense
查看>>
反射机制-----------通过它获取类中所有东西 出了注释
查看>>
svn的一个连接
查看>>
position:fixed和z-index:1
查看>>
unity, 延迟执行代码
查看>>
mysq找不到pid无法正常启动
查看>>
php实现抓取网站百度快照和百度收录数量的代码实例
查看>>
Qt那点事儿(三) 论父对象与子对象的关系
查看>>
jar 命令 打包装class文件的文件夹
查看>>
node.js express配置允许跨域
查看>>
JSP EL表达式详细介绍(转)
查看>>
要想找出正好包含5个字符的名字
查看>>
用js把图片做的富有动态感,并对以后需要用着的属性进行封装
查看>>