外观
一句话答案
浅拷贝只复制引用(指向同一对象),深拷贝递归复制所有引用对象,实现方式:序列化反序列化或手动递归复制。
核心要点
浅拷贝: Object.clone()默认 / BeanUtils.copyProperties 深拷贝: 序列化反序列化 / 手动递归 / JSON转换
追问与易错
追问方向:
- BeanUtils.copyProperties 是深拷贝还是浅拷贝?(浅拷贝)
- 实现深拷贝的方式有哪些?(序列化/JSON转换/手动递归/Cloneable递归clone)
- 什么场景需要深拷贝?(需要隔离修改的可变对象,如缓存返回值)
易错点:
- ❌ "实现 Cloneable 就是深拷贝"——Object.clone() 默认是浅拷贝
- ❌ 忽略不可变对象不需要深拷贝——String/Integer 等不可变对象浅拷贝即可
💡 记忆锚点
浅拷贝是复印一张名片(两人共用同一套房),深拷贝是连房子一起克隆一套。Object.clone()默认只复印名片;要克隆房子得走序列化/JSON转换/手动递归。不可变对象(如String)不用深拷贝——石碑没人改得了。