Java二维数组的复制(三种方法,无clone())

本文介绍了三种Java中数组拷贝的方法:直接拷贝地址、for循环遍历拷贝及使用Arrays类的方法。并强调了直接拷贝地址会导致两个数组引用同一内存区域的问题。

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

方法一:直接拷贝数组的地址

int[][] array = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
array2 = array;

此时是把array的地址给了array2,俩者指向同一块内存,所以,当其中一个数组的某个元素改变时,另一个数组的相对应元素也会发生改变。

方法二:for循环遍历拷贝

int[][] array = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
 for(int i = 0;i < array.length;i++){
      for(int j = 0;j < array[i].length;j++){
                array2[i][j] = array[i][j];
      }

补充foreach循环遍历二维数组

//foreach
    public static void show2(int[][] array){
        for( int[] brr: array ){
            for(int i:brr){
                System.out.print(i+" ");
            }
            System.out.println();
 		}
	}

方法三:Arrays.copyOf与 Arrays.arraycopy

System.arraycopy(Object src, srcindex, Object dest,destindex,length)

Object src:源数组
srcindx:原数组起始下标
Object dest:目的数组
destindex:目的数组开始的下标 length:复制的长度

应该注意的是:这个函数,一维数组复制是可以的,但是二维数组这样调用的时候,如果改变了目的数组的值,源数组的相应的值也会改变。
必须使用for循环进行拷贝,不然拷贝的只是地址,并没有拷贝到值。

   for (int i = 0; i < src.length; i++) {
         System.arraycopy(a[i], 0, dest[i], 0, dest[0].length);
    }
	int[][] array = {{1,2,3},{4,5,6}};
    int[][] array2 = new int[2][3];
    for(int i = 0;i < array.length;i++)
       	 array2[i] = Arrays.copyOf(array[i],array[i].length);

不推荐使用clone()拷贝。
有兴趣可以看看:
Java中clone()方法的理解
end.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值