我们在上一篇文章中讲了一些克隆的基本概念,以及克隆的分类,今天我们详细聊一聊Java中的深克隆和浅克隆。
首先,还是先看两者图回忆下两者的区别。
浅克隆
深克隆
对于浅克隆来说,一般的步骤如下:
1.被克隆的类需要实现Cloneable接口,这个接口是一个标记接口
2.覆盖clone方法,访问权限设置为public。在方法中调用super.clone()方法得到需要复制的对象。
具体代码如下:
结果是:
同理,我们看下深拷贝。
为了方便演示,我们新增一个类:
然后在LowClassClone中引用这个类,结果如下:
其中,clone方法和浅拷贝一样,执行结果是:
可以看出,引用属性还是使用的是同一个属性,如果我们修改l1对象的attach变量的值,那么l2变量的attach属性值也会跟着发生改变。这样,显然违背了拷贝的初衷。
那么如何改进呢?
其实很简单,我们只需要做两件事:
1.Attach类和LowClassClone一样实现覆盖自己的clone方法
2.修改LowClassCLone的clone方法,使其能够复制引用变量
执行结果是:
两个对象不相同,两个对象的引用属性也不相同,达到深度克隆的目的。
如果内容对您有帮助,希望您能多多点赞收藏加关注,激励作者创作出更加优质内容,谢谢!
| 留言与评论(共有 0 条评论) “” |