克隆、深拷贝和浅拷贝

    浅拷贝:复制一个对象,对象内部存在的指向其他对象的引用则不赋值。

    深拷贝:除了赋值对象本身外,还复制对象内部引用指向的对象。

    为了更加清楚地表达两者之间的区别,用图示说明。

    假设有一个对象A,包含两个对象A1、A2的引用。

    对A进行浅拷贝后,得到对象B,但是对象A1、A2并没有被拷贝:

    对A进行深拷贝,得到对象B的同时,A1和A2连同它们的引用也被拷贝:

    上面,我们对浅拷贝和深拷贝的概念有了一定了解,接下来对java的克隆进行一些讨论。

    在最基本的Object类中,有一个本地方法clone(),为避免创建的每个类都默认具有克隆能力,JDK中将该方法设置为protected。Object.clone()会检查原先的对象有多大,再为新对象腾出足够多的内存,将所有二进制位从原来的对象复制到新对象。这叫做“按位复制”。在Object.clone()开始操作前,首先会检查一个类是否具有克隆能力,即它是否实现了Cloneable接口。若未实现,Object.clone()方法会抛出一个CloneNotSupportedException异常,指出我们不能克隆它。

    根据上面的描述,如果要使用Object.clone()来实现对象的克隆功能,有两点需要注意:1、调用super.clone(),并将克隆方法设置为public;2、实现cloneable接口。

    另外,利用java序列化也可以实现克隆。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值