logo

深拷贝、浅拷贝、引用拷贝?

  1. 引用拷贝:引用拷贝会在栈上生成一个新的对象引用地址,但是两个最终指向依然是堆中同一个对象
  2. 浅拷贝:浅拷贝会在堆上创建一个新对象,新对象和原对象本身没有任何关系,新对象和原对象不等,但是新对象的属性和老对象相同

具体可以看如下区别:

  • 如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值;
  • 如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象),也就是说拷贝对象和原对象共用同一个内部对象。因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
  1. 深拷贝 :深拷贝会完全复制整个对象,包括这个对象所包含的内部对象,堆中的对象也会拷贝⼀ 份

浅拷贝如何实现呢?

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

深拷贝如何实现呢?

  1. 重写克隆⽅法:重写克隆⽅法,引⽤类型变量单独克隆,这⾥可能会涉及多层递归。
  2. 序列化:可以先讲原对象序列化,再反序列化成拷贝对象

优质图解:面试题:深拷贝、浅拷贝、引用拷贝的区别关注我,公众号:小牛呼噜噜