浅拷贝与深拷贝java(Java中浅拷贝和深拷贝的区别)
问题背景
日常工作中,我们经常使用对象的clone一个对象,那么clone有几种呢?或者说什么是浅拷贝和深拷贝,他们有什么区别?
浅拷贝定义在拷贝一个对象时,对对象的基本数据类型的成员变量进行拷贝,但对引用类型的成员变量只进行引用的传递,并没有创建一个新的对象,当对引用类型的内容修改会影响被拷贝的对象。简而言之:浅拷贝仅仅复制所拷贝的对象,而不复制它所引用的对象。
浅拷贝Demo- 先定义一个Car类,具有name属性
- 定义一个Boy类,具有name和Car两个属性
- 开始测试
- 测试结果
拷贝得到的新的Boy对象,持有和原来的对象同一个Car对象,即浅拷贝仅仅复制所拷贝的对象,而不复制它所引用的对象。
深拷贝定义在拷贝一个对象时,除了对基本数据类型的成员变量进行拷贝,对引用类型的成员变量进行拷贝时,创建一个新的对象来保存引用类型的成员变量。简而言之:深拷贝把要复制的对象所引用的对象都复制了一遍。
深拷贝Demo修改浅拷贝demo中的Boy类的clone方法如下,其他代码保持不变。
测试结果如下:
Clone得到Boy对象和他引用的Car对象,都不是原来的对象了。
总结java中clone方法是一个浅拷贝,引用类型依然在传递引用。我们可以通过继续调用clone()方法,对该对象的引用类型变量再实现一次clone()的方法来实现深克隆。当然,也可以通过序列化该对象,然后反序列化回来,就能得到一个全新的对象的方式来实现深克隆。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com