对深拷贝与浅拷贝的理解-测试
一、通过例子引入
(1)赋值
直接用赋值的方式
返回true 说明两份有相同的内存地址
内容相同
则:它是发生了浅拷贝!!!
(2)使用clone()方法
1.首先对象实现Cloneable。注意。
2.对象的成员中重写clone方法
3.测试
两个地址不相等
前者对象未因后者对象的改变而改变-------互不影响-------不是引用!
说明发生了深拷贝!!!
小结:
如果一个被复制的属性都是基本类型,那么只需要实现当前类的cloneable机制就可以了,此为浅拷贝。
如果被复制对象的属性包含其他实体类对象引用,那么这些实体类对象都需要实现cloneable接口并覆盖clone()方法。
(3)拷贝对象里有其他对象的引用
特殊的是!下面的例子!
在User对象里增加一个引用对象 Score!
此种情况,则是因为:score未发生拷贝!
深拷贝 =等价于= 每一层对象都进行浅拷贝
修改后: