Arrays.copyOf() 和 System.arraycopy()区别

Arrays.copyOf()

public static int[] copyOf(int[] original, int newLength) {
   int[] copy = new int[newLength];
   System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
   return copy;
}
//创建了一个新的数组,然后调用System.arrayCopy()向新数字中复制内容,返回新数组。

System.arraycopy()

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);        

总结

Arrays.copyOf()System.arraycopy()
调用时只需要原数组即可调用时需要原数组和目标数组
有返回值(新数组)无返回值
Arrays.copyOf()实现是内部新建一个数组,调用System.arraycopyof()将原数组的内容复制到新数组中去,并且长度为newLengthnative方法

扩展:一维数组的四种复制方式

  1. for循环挨个复制
  2. 调用 Arrays.copyOf 方法
  3. 调用 System.arraycopy 方法
  4. 调用 object 中的 clone 方法

for循环太简单啦,就没测试啦,同时我们可以看出一维数组的三种方式都是 深拷贝!

public static void main(String[] args){
    int[] arr = {1,2,3};
    int[] brr =new int[3];
    System.arraycopy(arr,0,brr,0,arr.length);
    int[] crr = Arrays.copyOf(arr, arr.length);
    int[] drr = arr.clone();
    arr[0] = 0;
    System.out.println("arr:  " +Arrays.toString(arr));
    System.out.println("System.arraycopy:  " + Arrays.toString(brr));
    System.out.println("Arrays.copyOf:  " + Arrays.toString(crr));
    System.out.println("clone: " + Arrays.toString(drr));
}

原文链接:https://blog.csdn.net/weixin_39674445/article/details/111926206
https://blog.csdn.net/dream_one_day/article/details/104136570

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值