Android_Question icon indicating copy to clipboard operation
Android_Question copied to clipboard

深复制(深拷贝)与浅复制(浅拷贝)的区别?

Open whatshappen opened this issue 6 years ago • 1 comments

whatshappen avatar Apr 17 '19 01:04 whatshappen

首先要先明白为什么需要使用克隆呢?

克隆的对象可能包含一些已经修改过的属性,而 new 出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的 "状态" 就需要克隆了。

那如何实现对象克隆呢?有两种办法:

实现 Cloneable 接口并重写 Object 类中的 clone() 方法 实现 Serialiable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆 深拷贝和浅拷贝的区别是什么?

浅拷贝

当对象被复制的时候只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。

深拷贝

除了对象本身被复制外,对象所包含的所有成员变量也将被复制。

Java 默认的是浅拷贝,如果想实现深拷贝,就需要对象所包含的引用类型的成员变量也需要实现 Cloneable 接口,或者实现 Serialiable 接口。

Omooo avatar Apr 17 '19 01:04 Omooo