码迷,mamicode.com
首页 > 编程语言 > 详细

java浅拷贝和深拷贝

时间:2017-10-22 00:34:24      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:程序员   分代   logs   分配   tar   因此   png   image   .com   

转:http://blog.csdn.net/u014727260/article/details/55003402

 

实现clone的2点:

1,clone方法是Object类的一个方法,所以任何一个类都会自动拥有该方法

2,并不是所有的类可以调用clone方法,因为javac需要程序员显示的声明,方法就是在类上声明“implements Cloneable”

技术分享

 

浅拷贝

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。

实现对象拷贝的类,必须实现Cloneable接口,并覆写clone()方法。

深拷贝

深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。

现在为了要在clone对象时进行深拷贝, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也clone出来。如果只是用Object中默认的clone方法,是浅拷贝的。

 

如何进行彻底的深拷贝

对于上面的例子来说,怎样才能保证两个Body对象完全独立呢?只要在拷贝Head对象的时候,也将Face对象拷贝一份就可以了。这需要让Face类也实现Cloneable接口,实现clone方法,并且在在Head对象的clone方法中,拷贝它所引用的Face对象。修改的部分代码如下:

java浅拷贝和深拷贝

标签:程序员   分代   logs   分配   tar   因此   png   image   .com   

原文地址:http://www.cnblogs.com/smuxiaolei/p/7707308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!