这篇文章详细介绍了深复制和浅复制,https://segmentfault.com/a/1190000010648514

定义

  • 浅复制:只复制对象的基本数据类型(不含包装类),对于引用的对象,只传递引用而不真正创建指向的对象

  • 深复制:复制对象的基本数据类型,同时也创建引用指向的对象

实现方式

浅复制通过实现java.lang.Cloneable接口,调用父类Object的clone方法实现

深复制一般通过序列化反序列化,也可在覆写clone方法时将所有引用指向的对象依次clone并设置值,不过比较繁琐

注意点

  • 浅复制关联的类不需要实现java.lang.Cloneable接口,而深复制使用序列化方式时需要所有引用类实现java.io.Serializable接口

  • 两种方式都会逐级关联复制,即引用对象的引用对象也会复制

验证:

https://github.com/icgeass/java/blob/master/src/main/java/com/zeroq6/java/corejava/clone/TestClone.java