深拷贝与浅拷贝java代码
时间: 2024-10-11 07:05:41 浏览: 27
java深入理解浅拷贝和深拷贝
5星 · 资源好评率100%
在Java中,深拷贝和浅拷贝是指对象复制的方式,它们的区别在于是否完全复制对象的所有引用。这里我将简述一下以及给出相应的代码示例:
**浅拷贝(Shallow Copy):**
浅拷贝只复制了对象的引用,如果原对象内部有其他对象或数组,这些会被共享。这意味着对新副本所做的修改会影响到原对象。
```java
public class Test {
public static void main(String[] args) {
List<String> originalList = new ArrayList<>();
originalList.add("A");
originalList.add("B");
// 浅拷贝
List<String> shallowCopy = originalList; // 这是一个引用复制,不是实际的对象复制
System.out.println(originalList); // [A, B]
System.out.println(shallowCopy); // [A, B]
shallowCopy.set(0, "Changed"); // 修改副本影响到原对象
System.out.println(originalList); // [Changed, B]
}
}
```
**深拷贝(Deep Copy):**
深拷贝则是对整个对象及其所有嵌套对象进行完整的复制,包括所有成员变量的值和引用。这样,修改副本不会影响到原对象。
```java
import java.util.ArrayList;
import java.util.List;
public class DeepCopyExample {
public static void main(String[] args) {
List<String> originalList = new ArrayList<>();
originalList.add("A");
originalList.add("B");
// 深拷贝
List<String> deepCopy = new ArrayList<>(originalList); // 使用构造函数创建新的ArrayList,并传入原始列表的引用
System.out.println(originalList); // [A, B]
System.out.println(deepCopy); // [A, B]
deepCopy.set(0, "Changed"); // 修改副本不影响原对象
System.out.println(originalList); // [A, B]
}
}
```
阅读全文