JAVA深拷贝浅拷贝
时间: 2024-12-04 15:09:32 浏览: 5
在Java中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是用来复制对象及其内容的概念:
**浅拷贝(Shallow Copy)**:
当你对一个对象进行浅拷贝时,实际上是复制了一个新的引用到原始对象。这意味着新对象和原始对象共享相同的内存空间,所以如果原始对象的属性(如数组、集合、引用类型等)发生变化,新对象也会受到影响。浅拷贝适用于基本类型和不可变的对象,以及简单的对象,如单个对象本身,不会引起太大的性能开销。
示例代码:
```java
List<String> list = new ArrayList<>();
list.add("a");
List<String> shallowCopy = list; // 浅拷贝,list和shallowCopy指向同一个列表
```
**深拷贝(Deep Copy)**:
深拷贝则是创建了一个全新的对象副本,包括所有的属性和嵌套对象。即使是引用类型的属性,也被复制成了完全独立的新实例,因此修改其中一个不会影响另一个。在Java中,对于复杂数据结构,尤其是那些包含大量对象的结构(如Map、Set、自定义对象),应使用深拷贝。
示例代码(使用序列化反序列化实现深拷贝):
```java
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file.ser"));
oos.writeObject(originalObject);
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file.ser"));
deepCopy = ois.readObject(); // 深拷贝,deepCopy是originalObject的一个完全独立副本
```
阅读全文