【Java-----数组拷贝】

深拷贝和浅拷贝

对于数组来说,深拷贝就是相当于拷贝了数组的对象(基本数据类型),也就是数组当中的内容。而浅拷贝就是拷贝的是数组的地址(引用类型),浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化。

方式一:循环拷贝

循环拷贝就使用一个for循环进行元素逐个拷贝,进行深拷贝或浅拷贝可自行把握。

int[] arr= {2,5,9,4,1,0};
int[] arr1=new int[6];
for(int i=0;i<6;i++) {
	arr1[i]=arr[i];
}
System.out.print(Arrays.toString(arr1));

方式二:System.arraycopy(浅拷贝)

这个是系统提供的拷贝方式,也是我们推荐使用的拷贝方式,它是浅拷贝,也就是说对于非基本类型而言,它拷贝的是对象的引用,而不是去新建一个新的对象。

该方法特点如下:

  • 是由C/C++代码实现的
  • 运行速度很快
  • 运行位置在本地方法栈

示例代码如下:

int[] arr= {2,5,9,4,1,0};
int[] res=new int[arr.length];
System.arraycopy(arr, 0, res, 0, arr.length);
System.out.println(Arrays.toString(res));

方式三:Arrays.copyOf(浅拷贝)

该方法实际上它调用的就是System.arraycopy,所以也是浅拷贝。

示例代码如下:

int[] arr= {2,5,9,4,1,0};
int[] res=Arrays.copyOf(arr, arr.length);
System.out.println(Arrays.toString(res));

方式四:对象拷贝(Object.clone)

clone()比较特殊,对于对象而言,它是深拷贝,但是对于数组而言,它是浅拷贝。对于数组而言,它不是简单的将引用赋值为另外一个数组引用,而是创建一个新的数组,但是我们知道,对于数组本身而言,它的元素是对象的时候,本来数组每个元素中保存的就是对象的引用,所以拷贝过来的数组自然也是对象的引用,所以对于数组对象元素而言,它又是浅拷贝。

int[] arr= {2,5,9,4,1,0};
int[] res=arr.clone();
System.out.println(Arrays.toString(res));

你可能感兴趣的:(Java,数据结构,java,开发语言,后端)