java数组复制

讲java的数组复制要从java的变量传递类型讲起。

java的变量传递分为值传递和引用传递。

基本数据类型的赋值是值传递,数组以及Class的的赋值是引用传递。


当我想保存数组a时,习惯性的采取了

<pre name="code" class="java">int[]  a = {1,2,3}
int[]  b = a;

 因为数组的赋值是引用传递,所以a,b是指向同一块表示该数组内存地址 

对a的操作,会影响到b的值,所以并没有起到保存a的作用。

对于一维数组来说,可以用

int[]  a = {1,2,3}
int[]  b = a.clone();

这样a,b分别指向不同的内存区域,并且此时他们的值也是一样的。

对于多维数组,

int[][] a = {{1,2,3},{4,5,6}};
int [][] b = a.clone();

事实上,并没有起到作用,因为在java底层实现中多维数组是数组中的数组。因为这段的代码只是让a,b指向了不同的内存区域,假设为A,B,但A,B却又共同指向了里层数组arr1,arr2。

正确的代码是

public int[][] copy2DArr(int[][] a) {
		int[][] b = new int[a.length][2];
		for (int i = 0; i < a.length; i++) {
			b[i] = a[i].clone();
		}
		return b;
	}



所以调用clone()的对象一定要是代表多维数组最里层的的数组对象


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值