数组浅拷贝和深拷贝的区别
时间: 2024-06-16 08:07:04 浏览: 81
数组的深拷贝与浅拷贝以及数组拷贝的几种方式比较
数组的浅拷贝和深拷贝是两种不同的拷贝方式,它们的区别在于拷贝后对原始数组和拷贝数组的影响。
1. 浅拷贝:
- 浅拷贝是指创建一个新的数组,并将原始数组中的元素逐个复制到新数组中。
- 新数组和原始数组共享相同的元素对象,即新数组中的元素是原始数组中元素的引用。
- 当修改新数组中的元素时,会影响到原始数组中对应位置的元素。
- 浅拷贝可以通过`clone()`方法实现。
2. 深拷贝:
- 深拷贝是指创建一个新的数组,并将原始数组中的元素逐个复制到新数组中。
- 新数组和原始数组的元素是完全独立的对象,即新数组中的元素是原始数组中元素的副本。
- 当修改新数组中的元素时,不会影响到原始数组中对应位置的元素。
- 深拷贝可以通过循环遍历原始数组,逐个复制元素到新数组实现。
下面是一个示例代码,演示了浅拷贝和深拷贝的区别:
```java
public class ArrayCopyExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
// 浅拷贝
int[] shallowCopy = originalArray.clone();
shallowCopy[0] = 10;
System.out.println("原始数组:" + Arrays.toString(originalArray));
System.out.println("浅拷贝数组:" + Arrays.toString(shallowCopy));
// 深拷贝
int[] deepCopy = new int[originalArray.length];
for (int i = 0; i < originalArray.length; i++) {
deepCopy[i] = originalArray[i];
}
deepCopy = 20;
System.out.println("原始数组:" + Arrays.toString(originalArray));
System.out.println("深拷贝数组:" + Arrays.toString(deepCopy));
}
}
```
输出结果:
```
原始数组:[1, 2, 3, 4, 5]
浅拷贝数组:[10, 2, 3, 4, 5]
原始数组:[1, 2, 3, 4, 5]
深拷贝数组:[20, 2, 3, 4, 5]
```
可以看到,浅拷贝修改了新数组的第一个元素,同时也影响到了原始数组的第一个元素;而深拷贝修改了新数组的第一个元素,但不会影响到原始数组的第一个元素。
阅读全文