Java学习:数组的浅拷贝和深拷贝

时间:2021-12-19 19:49:13

浅拷贝:

在堆内存中不会分配新的空间,而是增加一个引用变量和之前的引用指向相同的堆空间。

int[] a = {1,2,3,4,5};

int[]b = a;

public class Test {

public static void main(String[] args) {

//数组的浅拷贝,a,b两个引用指向同一个数组
int[] a = {1,2,3,4,5};
int[] b = a;

for (int i = 0; i < b.length; i++) {
System.out.print(b[i]
+ " ");
}

System.out.println();
}
}

深拷贝:

在堆内存中分配新空间,将之前的数组堆内存中的内容拷贝到新的空间中。

int[] a = {1,2,3,4,5};

int[] b = new int[5];

System.arraycopy(a, 0, b, 0, 5);

public class Test {

public static void main(String[] args) {

//数组的深拷贝,a,b两个引用指向同一个数组
int[] a = {1,2,3,4,5};
int[] b = new int[5];

/**
* System.arraycopy(src, srcPos, dest, destPos, length);
* src:源数组
* srcPos:源数组中拷贝的起始位置
* dest:目标数组
* destPos:目标数组中开始存放的位置
* length:拷贝的长度
*/
System.arraycopy(a,
0, b, 0, a.length);

for (int i = 0; i < b.length; i++) {
System.out.print(b[i]
+ " ");
}

System.out.println();
}
}