总结
1.前言
浅拷贝和深拷贝,问的其实是:当拷贝一个对象时,是否拷贝了它引用的其他对象?
比如,一个学生对象,它有一个成员变量引用了课程对象。
当我拷贝这个学生对象时,是否拷贝了课程对象,这就是判断深浅拷贝的依据。
2.区别
3.具体代码
本文只阐述思路,不复制具体代码。
请看Java 浅拷贝和深拷贝这位朋友的代码,我的总结建立在他的代码上。
4.必备知识
Java的值传递。
详解
1.直接赋值
studentA:[Student: 685325104,subject:[Subject: 460141958,name:数学],name:李四,age:40]
studentB:[Student: 685325104,subject:[Subject: 460141958,name:数学],name:李四,age:40]
无论是学生对象还是课程对象,HashCode都是相同的.
说明我们没有新建任何对象、没有做任何拷贝,就是多搞了一个引用而已。
2.浅拷贝
studentA:[Student: 685325104,subject:[Subject: 460141958,name:数学],name:张三,age:30]
studentB:[Student: 1163157884,subject:[Subject: 460141958,name:数学],name:李四,age:40]
学生对象的hashCode变化——很明显,我们新建了一个学生对象。
但是课程对象的hashCode没变,说明我们两个学生对象,引用的是同一个课程对象。
这就是浅拷贝:只拷贝了学生对象,但是没有拷贝学生对象引用的课程对象!
3.深拷贝
studentA:[Student: 685325104,subject:[Subject: 460141958,name:语文],name:张三,age:30]
studentB:[Student: 1163157884,subject:[Subject: 1956725890,name:数学],name:李四,age:40]
看!无论是学生对象还是课程对象,hashCode都变了,说明我们有两个学生对象,每个学生对象又有各自引用的课程对象!这就是深拷贝。
参考资料: