深拷贝、浅拷贝、引用拷贝?
- 引用拷贝:引用拷贝会在栈上生成一个新的对象引用地址,但是两个最终指向依然是堆中同一个对象
- 浅拷贝:浅拷贝会在堆上创建一个新对象,新对象和原对象本身没有任何关系,新对象和原对象不等,但是新对象的属性和老对象相同。
具体可以看如下区别:
- 如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值;
- 如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象),也就是说拷贝对象和原对象共用同一个内部对象。因此如果其中一个对象改变了这个地址,就会影响到另一个对象。
- 深拷贝 :深拷贝会完全复制整个对象,包括这个对象所包含的内部对象,堆中的对象也会拷贝⼀ 份
浅拷贝如何实现呢?
Object类提供的clone()⽅法可以⾮常简单地实现对象的浅拷贝。
深拷贝如何实现呢?
- 重写克隆⽅法:重写克隆⽅法,引⽤类型变量单独克隆,这⾥可能会涉及多层递归。
- 序列化:可以先讲原对象序列化,再反序列化成拷贝对象
优质图解:面试题:深拷贝、浅拷贝、引用拷贝的区别,关注我,公众号:小牛呼噜噜