浅克隆和深克隆

1浅克隆(shallow copy)是通过调用Object的clone方法,创建出和原对象 结构相同的新对象。 浅克隆 和深克隆(deep copy)不同,如果被拷贝的对象属性为可变类,则直接复制该引用对象的地址。
这会导致,浅克隆出来的对象 如果改变 可变类属性值,则原对象的可变类属性值也会一起变。换句话说,如果属性值String、Integer等不可变类,则并不会一同改变

2调用 Object的clone方法,必须实现Cloneable ,否则会抛出 CloneNotSupportedException。故浅克隆对象必须实现Cloneable接口
3https://www.zhihu.com/question/63667745/answer/224396818
调用克隆方法,并不会调用构造器

4实现深克隆有两种方法
1)是将所有可变类属性都重写Clone方法实现Cloneable接口,并将原 可变类属性值 浅克隆后赋给 浅克隆出来的对象
但问题是,如果可变类属性值 的类 中有 可变类属性值 ,那么代码会非常繁琐
2)为了解决这个问题,可以通过序列化,实现深克隆

猜你喜欢

转载自blog.csdn.net/qq_19934363/article/details/88831147