Skip to content

Java深拷贝操作

基础内容

参考:

深拷贝

  • 深拷贝会递归地复制原对象及其所有层次的成员对象

实现方式

  • 实现Cloneable接口并重写clone()方法
  • 使用序列化和反序列化
  • 使用第三方库

浅拷贝(Shallow Copy)和深拷贝(Deep Copy)的区别:

特性浅拷贝深拷贝
拷贝范围仅拷贝对象的基本类型字段和引用。拷贝对象及其所引用的所有对象。
内部对象是否重用浅拷贝后的两个对象共享同一引用对象。每个对象包括其内部引用对象都是独立的副本。
对象的独立性对拷贝前后两个对象的操作互相影响。拷贝前后两个对象完全独立,互不影响。
速度与效率通常比深拷贝速度快,效率高。通常比浅拷贝速度慢,效率低。
实现难度实现简单,直接调用clone()方法即可。实现复杂,需要递归或序列化等方法。
是否涉及递归否,只拷贝当前层次的字段。是,需要递归拷贝所有层次的对象。
典型实现方法通过Cloneable接口和默认的clone()方法。使用Cloneable接口并重写clone()方法,或通过序列化。

使用工具类没有拷贝 BigDecimal 类型字段排查

  • 大概率可能是因为这个是引用类型,而同等类下有一个字段是 Integer ,可能是Integer 有缓存??(并不是)

周六的时候看一下(工作的一件事情跟踪....)