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