java实现深拷贝和浅拷贝
时间: 2024-10-10 11:00:28 浏览: 36
在Java中,深拷贝和浅拷贝是复制对象时常用的概念,它们主要应用于复杂数据结构的克隆操作。
**浅拷贝(Shallow Copy)**:
浅拷贝只复制了对象本身以及它引用的对象的一层,即对于对象内部的数据结构,如数组、集合等,只是复制了引用,而不是副本。这意味着,如果原对象的这些内部对象是动态分配的,那么新创建的对象实际上会指向相同的内存位置。因此,对原对象内部修改会影响浅拷贝的对象。
```java
Object obj = new ArrayList<>();
ArrayList<Object> shallowCopy = (ArrayList<Object>)obj.clone(); //浅拷贝
// 修改原列表
obj.add(new Object());
System.out.println(shallowCopy); // 输出:[...]
```
**深拷贝(Deep Copy)**:
深拷贝则是对整个对象及其所有嵌套对象的完整复制,包括内部对象的所有属性值。也就是说,无论是原始对象还是其内部对象,都会生成全新的实例,并存储在新的内存空间中。这样,对原对象的修改不会影响到深拷贝。
```java
import java.util.ArrayList;
import java.util.List;
Object obj = new ArrayList<>();
obj.add(new ArrayList<>()); // 嵌套List
Object DeepCopy = new Object(obj); // 使用序列化反序列化做深拷贝
// 修改原列表
obj.get(0).add(new Object());
System.out.println(DeepCopy); // 输出空列表,因为深拷贝是独立的
```
阅读全文