Java|Java深克隆和浅克隆

Java|Java深克隆和浅克隆

文章图片

Java|Java深克隆和浅克隆

文章图片

Java|Java深克隆和浅克隆

文章图片

Java|Java深克隆和浅克隆

文章图片

Java|Java深克隆和浅克隆

文章图片


我们在上一篇文章中讲了一些克隆的基本概念 , 以及克隆的分类 , 今天我们详细聊一聊Java中的深克隆和浅克隆 。
首先 , 还是先看两者图回忆下两者的区别 。
浅克隆

深克隆

对于浅克隆来说 , 一般的步骤如下:
1.被克隆的类需要实现Cloneable接口这个接口是一个标记接口
2.覆盖clone方法 , 访问权限设置为public 。 在方法中调用super.clone()方法得到需要复制的对象 。
具体代码如下:


结果是:

同理 , 我们看下深拷贝 。
为了方便演示 , 我们新增一个类:

然后在LowClassClone中引用这个类 , 结果如下:

其中 , clone方法和浅拷贝一样 , 执行结果是:

可以看出 , 引用属性还是使用的是同一个属性 , 如果我们修改l1对象的attach变量的值 , 那么l2变量的attach属性值也会跟着发生改变 。 这样 , 显然违背了拷贝的初衷 。
那么如何改进呢?
其实很简单 , 我们只需要做两件事:
1.Attach类和LowClassClone一样实现覆盖自己的clone方法

2.修改LowClassCLone的clone方法 , 使其能够复制引用变量

执行结果是:

两个对象不相同 , 两个对象的引用属性也不相同 , 达到深度克隆的目的 。
【Java|Java深克隆和浅克隆】\uD83D\uDE4F如果内容对您有帮助 , 希望您能多多点赞收藏加关注 , 激励作者创作出更加优质内容 , 谢谢!\uD83D\uDE4F