0
点赞
收藏
分享

微信扫一扫

对深拷贝与浅拷贝的理解-测试


一、通过例子引入

(1)赋值

对深拷贝与浅拷贝的理解-测试_赋值

直接用赋值的方式

返回true  说明两份有相同的内存地址

内容相同

则:它是发生了浅拷贝!!!

 

(2)使用clone()方法

1.首先对象实现Cloneable。注意。

对深拷贝与浅拷贝的理解-测试_浅拷贝_02

对深拷贝与浅拷贝的理解-测试_浅拷贝_03

2.对象的成员中重写clone方法

对深拷贝与浅拷贝的理解-测试_赋值_04

3.测试

对深拷贝与浅拷贝的理解-测试_赋值_05

两个地址不相等  

前者对象未因后者对象的改变而改变-------互不影响-------不是引用!

说明发生了深拷贝!!!

小结:

如果一个被复制的属性都是基本类型,那么只需要实现当前类的cloneable机制就可以了,此为浅拷贝。

如果被复制对象的属性包含其他实体类对象引用,那么这些实体类对象都需要实现cloneable接口并覆盖clone()方法。

(3)拷贝对象里有其他对象的引用

对深拷贝与浅拷贝的理解-测试_浅拷贝_06

特殊的是!下面的例子!

 

在User对象里增加一个引用对象 Score!

对深拷贝与浅拷贝的理解-测试_赋值_07

此种情况,则是因为:score未发生拷贝!         

深拷贝      =等价于=     每一层对象都进行浅拷贝  

 

修改后:

对深拷贝与浅拷贝的理解-测试_深拷贝_08

 

举报

相关推荐

0 条评论