转载

【Java】深拷贝和浅拷贝

拷贝分类

上面的问题,其实就是因为对拷贝的不熟悉导致的。

根据对对象属性的拷贝程度(基本数据类和引用类型),会分为两种:

Shallow Copy
Deep Copy

浅拷贝

1. 浅拷贝介绍

浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。即默认拷贝构造函数只是对对象进行浅拷贝复制(逐个成员依次拷贝),即只复制对象空间而不复制资源。

2. 浅拷贝特点

(1) 对于基本数据类型的成员对象,因为基础数据类型是值传递的,所以是直接将属性值赋值给新的对象。基础类型的拷贝,其中一个对象修改该值,不会影响另外一个。

(2) 对于引用类型,比如数组或者类对象,因为引用类型是引用传递,所以浅拷贝只是把内存地址赋值给了成员变量,它们指向了同一内存空间。改变其中一个,会对另外一个也产生影响。

结构图如下:

【Java】深拷贝和浅拷贝

3. 浅拷贝的实现

实现对象拷贝的类,需要实现 Cloneable 接口,并覆写  clone() 方法。

示例如下:

原文  https://www.maiyewang.com/archives/91903
正文到此结束
Loading...