System.arraycopy 和 Arrays.copyOf

本文详细介绍了Java中System.arraycopy方法的使用,通过实例展示了如何从源数组复制元素到目标数组。同时,分析了Arrays.copyOf方法的实现,指出它内部依赖于arraycopy,并根据源数组和目标数组的长度进行适当复制或截取。文章还提供了相关代码示例进行说明。
摘要由CSDN通过智能技术生成

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(相当于 扩容),如果目标数组比源数组短,那就截取源数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值