Java深克隆和浅克隆

我们在上一篇文章中讲了一些克隆的基本概念,以及克隆的分类,今天我们详细聊一聊Java中的深克隆和浅克隆。

首先,还是先看两者图回忆下两者的区别。

浅克隆

Java深克隆和浅克隆

深克隆

Java深克隆和浅克隆

对于浅克隆来说,一般的步骤如下:

1.被克隆的类需要实现Cloneable接口,这个接口是一个标记接口

2.覆盖clone方法,访问权限设置为public。在方法中调用super.clone()方法得到需要复制的对象。

具体代码如下:

Java深克隆和浅克隆

结果是:

Java深克隆和浅克隆

同理,我们看下深拷贝。

为了方便演示,我们新增一个类:

Java深克隆和浅克隆

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

Java深克隆和浅克隆

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

Java深克隆和浅克隆

可以看出,引用属性还是使用的是同一个属性,如果我们修改l1对象的attach变量的值,那么l2变量的attach属性值也会跟着发生改变。这样,显然违背了拷贝的初衷。

那么如何改进呢?

其实很简单,我们只需要做两件事:

1.Attach类和LowClassClone一样实现覆盖自己的clone方法

Java深克隆和浅克隆

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

Java深克隆和浅克隆

执行结果是:

Java深克隆和浅克隆

两个对象不相同,两个对象的引用属性也不相同,达到深度克隆的目的。

如果内容对您有帮助,希望您能多多点赞收藏加关注,激励作者创作出更加优质内容,谢谢!

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章