Java 如何拷贝数组的数据?

本文详细解释了在Java中如何正确地拷贝数组,避免因简单赋值导致的两个数组引用同一内存空间的问题。介绍了使用System.arraycopy()方法进行深拷贝的正确方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我们在操作Java数组的时候,其实是通过一个引用来操作数组的,如果使用简单的=操作符进行赋值的话,只是复制了引用,并没有把数组的数据复制一份。

  我们在拷贝数组时,最容易犯的一种错误就是使用赋值运算符=来复制数组,然后对新数组的操作的操作也影响到原数组的数据,那是因为它们根本指向的是同一内存空间。

代码如下:

public class Test3 {

	public static void main(String[] args) {
		int []arr=new int[]{1,2,3};
		int []arr2=arr;//赋值引用
		arr2[2]=8;//改变一个元素的值
		System.out.println(arr.length);
		for(int i:arr){
			System.out.println(i);
		}
	}
}

在以上的代码中,创建了一个长度为3int型数组arr,然后用赋值运算符=arr赋值给arr2,通过arr2把它的下标为2的元素的值改为8,然后输出arr,结果如下:

1

2

8

通过运行结果可以看出,arr数组的数据被arr2给修改了,而我们的本意是想创建俩个独立的数组,它们是互不影响的,其实,拷贝数组数据应该使用System.arraycopy()方法,代码如下:

public class Test3 {

	public static void main(String[] args) {
		int []arr=new int[]{1,2,3};
		int []arr2=new int[3];
		System.arraycopy(arr, 0, arr2, 0, arr.length);
		arr2[2]=8;
		for(int i:arr){
			System.out.println(i);
		}
	}
}

结果如图:

1

2

3

可以看见,俩个数组已经互不影响了~

注意:我们自己也可以写一个数组拷贝方法,关键点在于认识数组的内存结果。

总结:

使用System.arraycopy()方法或者创建一个新的数组实例,然后把数据一个个装进去,不能用=赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值