java 深拷贝与浅拷贝
时间: 2024-08-02 09:01:38 浏览: 65
在 Java 中,深拷贝和浅拷贝是指创建新对象并复制原有对象数据结构的过程,通常用于复杂的数据结构如数组、集合、对象等。它们的区别在于是否完全复制了对象的所有内容,包括嵌套的对象。
**浅拷贝**(Shallow Copy):它只是将原对象的引用复制给新对象。这意味着如果新对象中包含对原对象的引用,那么修改新对象会影响到原对象。在 Java 中,对于基本类型,浅拷贝就是简单地赋值;对于引用类型(如对象),则是复制指向内存地址的引用。
例如:
```java
Object obj = new Object();
Object copy = obj; // 浅拷贝,copy 和 obj 引向同一块内存
List list = new ArrayList(); // 对象
List copyList = list; // 浅拷贝,list 和 copyList 都引用同一个ArrayList实例
```
修改 `copyList` 的元素会改变 `list`:
```java
copyList.add("test");
System.out.println(list); // 输出 "test"
```
**深拷贝**(Deep Copy):则会对整个对象及其所有嵌套对象进行完整的副本操作,包括递归复制嵌套对象。这样改动一个深拷贝不会影响原始对象。在 Java 中,可以手动实现深拷贝,或者使用序列化反序列化的机制,比如 `Cloneable` 接口和 `Object.clone()` 方法(虽然不是所有类都实现了 Cloneable)。
例如:
```java
Object obj = new Object();
Object deepCopy = SerializationUtils.deepCopy(obj); // 使用工具类的深拷贝方法
```
在这个例子中,`deepCopy` 是一个新的对象,它的状态与 `obj` 完全独立。
阅读全文