深拷贝和浅拷贝?

  • 浅拷贝:浅拷贝仅复制被拷贝对象的成员变量值,包括基本数据类型的值和引用数据类型变量的地址值。对于引用类型变量指向的堆中的对象,浅拷贝只复制其地址,因此被拷贝对象和拷贝后的对象会共享同一个对象实例。
  • 深拷贝:深拷贝是完全拷贝一个对象,包括被拷贝对象的成员变量和堆中的对象。深拷贝会创建一个全新的对象实例,并将被拷贝对象中的成员变量值复制到新的对象中,包括引用类型变量指向的对象也会被复制一份。

以一个示例对象order为例,其中包含一个products列表,下面是浅拷贝和深拷贝的示意图:

javase-15.png

因此深拷贝是安全的,浅拷贝的话如果有引用类型,那么拷贝后对象,引用类型变量修改,会影响原对象。

浅拷贝如何实现呢?

Object 类提供的 clone()方法可以非常简单地实现对象的浅拷贝。

深拷贝如何实现呢?

  • 重写克隆方法:重写克隆方法,引用类型变量单独克隆,这里可能会涉及多层递归。
  • 序列化:可以先将原对象序列化,再反序列化成拷贝对象。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题