System.arraycopy 和 Arrays.copyOf

System.arraycopy 源码

/**
 * src 源数组
 * srcPos 源数组的起始位置
 * dest 目标数组
 * destPos 目标数组的起始位置
 * length 复制元素的数量
 */
public static native void arraycopy(Object src,  int  srcPos,
									Object dest, int destPos,int length);

举例:
数组a [0,1,2]
数组b[]
System.arraycopy(a,1,b,2,2);
得到的结果为数组b[0,0,1,2]
从数组a角标为1的位置开始,复制两个元素,也就是1,2,到数组b的第二位开始

控制台打印

public static void main(String[] args) {
        int[] a = new int[3];
        int[] b = new int[4];
        a[0] = 0;
        a[1] = 1;
        a[2] = 2;
        //从数组a的第1位开始,复制两个元素到数组b的第二位开始
        System.arraycopy(a,1,b,2,2);
        for (int i = 0; i < b.length; i++){
            System.out.println("b : " + b[i]);
        }
    }

结果

b : 0
b : 0
b : 1
b : 2

Arrays.copyOf() 源码

/**
 * original 源数组
 * newLength 新数组的长度
 */
public static int[] copyOf(int[] original, int newLength) {
		//定义一个新数组
        int[] copy = new int[newLength];
        //调用System.arraycopy方法进行复制
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

可以看到Arrays.copyOf方法中,还是调用了System.arraycopy,并且默认了从源数组的第0位开始复制到目标数组的第0位,复制元素的数量取源数组长度和目标数组长度的最小值。简单来说,目标数组比源数组长,那就全复制过来后边为0(相当于 扩容),如果目标数组比源数组短,那就截取源数组

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值