深拷贝:完全复制一个副本出来,副本的改变不影响原对象
浅拷贝反之
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存, 所以如果其中一个对象改变了这个地址,就会影响到另一个对象。。
浅拷贝对应的就是深拷贝,深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。

一个对象能被拷贝,需2个条件
1.实现Cloneable接口,使拷贝合法,不抛CloneNotSupportedException
2.覆写clone方法
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
clone()本身是浅拷贝,想要深拷贝需要自己实现改造。需要把对象中引用的所有对象都深拷贝一份。
具体参考:https://www.jianshu.com/p/5701f03a93fc
List的深拷贝
new新List对象,for循环添加
Map的深拷贝
putAll()
本文深入探讨了深拷贝和浅拷贝的概念,解释了它们的区别。深拷贝创建了对象的一个完整副本,改变副本不会影响原始对象,而浅拷贝仅复制对象引用,导致两个对象共享同一内存,修改会影响彼此。要实现深拷贝,对象需实现Cloneable接口并覆盖clone方法,同时递归处理所有引用的对象。对于List和Map的深拷贝,可以通过新建容器并逐个添加元素或使用putAll来实现。
676





