您的位置:首页 > 编程语言 > Java开发

Java中浅拷贝与深拷贝的区别

2017-07-28 19:22 274 查看

Java中浅拷贝与深拷贝的区别

       
今天在在学习java中,看到了clone()方法,查看一些资料,以及自己探索了一些关于浅克隆(shadow)与深克隆(deep clone)之间的关系,就此来发表一些我自己的看法。


 浅拷贝:       首先,浅拷贝实际上就是在拷贝成员变量的时候,只拷贝了基本数据类型和String数据类型。因为String数据类型是一种特殊的引用类型,JDK的设计者将String类型设计成了“不可变”(相对于StringBuffer和StringBuilder来说)的字符串,所以在这里可以把String类型的变量当成一个常量。

        但是,对于普通的引用数据类型,浅拷贝只是把这个数据类型的地址拷贝了一份,地址所指向的数据内容,并没有拷贝,所以可以看做是两个地址指向了同一个内容。因此,当要改变一个对象的引用类型的成员变量时,那么,就要改变引用数据的内容。但是这样一来,内容发生改变,那么拷贝的对象所指向这个内容的地址可能没变,但是内容也已经发生了变化。

        我们可以把这个引用数据的内容看做是一个人,而两个指向内容的地址,就像是一个人的两个名字一样。

        所以,浅拷贝:当一个对象的引用数据内容发生变化,那么另一个对象的引用数据内容就也会发生变化。

深拷贝:深拷贝中所拷贝出来的对象和原本对象之间没有存在关系,他们是两个相互独立存在的对象,即一个对象发生改变,另一个对象并不会发生改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java