syuez / Java-Object-Deep-Copy

Java 对象中的深克隆

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

实现 Java 对象的深克隆(deep copy)

当我们在 Java 中需要克隆一个对象时,有两种选择:

  • 浅克隆 Shallow Copy
  • 深克隆 Deep Copy

对于浅克隆,我们只复制字段值(filed values), 因此克隆可能依赖于原始对象。

在深克隆中,我们确保对象中的所有内容都被深层复制,因此副本不依赖于任何可能改变的引用。

浅克隆

对象的 hashCode 相同, equals 相等,但是不是同一个对象。符合克隆的定义:内容相同,但是不是同一个个体。

但是浅克隆有一个问题,当原始对象改变时,副本也会发生变化, 在代码中通常表现为被意外修改了。

深克隆

基于浅克隆上述的问题,所以深克隆采用了手段以达到所有内容都被深层复制的目的。

在 Java 中,深克隆有以下几个实现途径:

  • 构造函数复制
  • 实现基于 Object 的 clone 方法
  • 采用外部库,将对象序列化,然后将其反序列化为一个新对象

具体请看代码实现。


本文参考: How to Make a Deep Copy of an Object in Java

About

Java 对象中的深克隆

License:MIT License


Languages

Language:Java 100.0%