Java 数组的深拷贝和浅拷贝
一维数组 的拷贝
一维数组的拷贝共有6种方法。
只有方法一是浅拷贝,
其余均为深拷贝。
下边以实际代码测试结果进行说明。
int[] arr1 = {0, 1, 2, 3, 4, 5, 6};
下面每个方法拷贝完arr1后,将arr1[0]的值改变,观察新数组的第0个元素是否改变。
方法一: 直接引用(两个变量引用同一个数组)
int[] arr2 = arr1;
int[] arr3 = new int[7];
arr3 = arr1;
arr1[0] = 10;
运行结果:
方法二:clone() 一维数组
int[] arr4 = new int[7];
arr4 = arr1.clone();
int[] arr5 = (int[])arr1.clone();
arr1[0] = 10;
运行结果:
方法三:System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
int[] arr6 = new int[7];
System.arraycopy(arr1, 0, arr6, 0, 7);
arr1[0] = 10;
运行结果:
方法四:Arrays.copyOf(T[] original, int newLength)
int[] arr7 = Arrays.copyOf(arr1, 7);
arr1[0] = 10;
运行结果:
方法五:Arrays.copyOfRange(T[] original, int from, int to)
int[] arr8 = Arrays.copyOfRange(arr1, 0, 7);
arr1[0] = 10;
运行结果:
方法六:for循环拷贝
int[] arr9 = new int[7];
for(int i = 0; i < 7; i++) arr9[i] = arr1[i];
arr1[0] = 10;
运行结果:
二维数组:clone()
int[][] twoDimArr = {{0, 1, 2, 3, 4, 5, 6}};
int[][] twoDimArr1 = (int[][])twoDimArr.clone();
twoDimArr[0][0] = 10;
运行结果:
二维数组使用clone()进行拷贝,是浅拷贝。