System.arraycopy的使用和参数含义详解

一、官方解释;

1.从指定源阵列从指定位置开始复制阵列到目标阵列的指定位置
2.数组组件的子序列从src引用的源数组复制到dest引用的目标数组
3.复制的组件数量等于length参数
4.将源阵列中srcPos到srcPos+length-1位置的组件分别复制到目标阵列的destPos到destPos+length-1位置
5.如果src和dest参数指向相同的数组对象,那么执行复制操作时,就好像先将srcPos through srcPos+length-1位置的组件复制到带有length组件的临时数组中,然后将临时数组的内容复制到目标数组的destPos through destPos+length-1位置。
6.如果dest为空,则抛出NullPointerException。
7.如果src为空,则抛出NullPointerException,并且不修改目标数组。
8.如果以下任一项为真,则抛出ArrayStoreException,且目标不会被修改:
	src参数和dest参数引用组件类型为不同基元类型的数组。
	src参数指的是带有原始组件类型的数组,dest参数指的是带有引用组件类型的数组。
	src参数指的是带有引用组件类型的数组,dest参数指的是带有原语组件类型的数组。
9.如果以下任何一个为真,则抛出IndexOutOfBoundsException,并且目的地不会被修改:
	srcPos论点是否定的。
	destPos参数为负。
	长度参数是负的。
	srcPos+length大于src。Length,源数组的长度。
	destPos+length大于目的阵列的长度dest.length。
10.如果源数组从位置srcPos到srcPos+length-1的任何实际组件不能通过赋值转换转换为目标数组的组件类型,则会抛出ArrayStoreException。
11.在这种情况下,让k是小于长度的最小非负整数,以便src[srcPos+k]不能转换为目标数组的组件类型;当抛出异常时,从srcPos到srcPos+k-1位置的源数组组件已经被复制到目标数组位置destPos到destPos+k-1,并且目标数组的其他位置没有被修改。(由于已经列出的限制,这一段实际上只适用于两个数组的组件类型都是引用类型的情况。)
12.形参:
	SRC -源阵列。
	srcPos—源数组中的起始位置。
	Dest -目标阵列。
	destPos—目标数据中的起始位置。
	length-要复制的数组元素的数量。
13.抛出:
	IndexOutOfBoundsException -如果复制会导致访问数组边界之外的数据。
	ArrayStoreException -如果src数组中的元素由于类型不匹配而不能存储到dest数组中。
	NullPointerException -如果src或dest为空。

二、简单而言:

System.arraycopy 按参数来说,就是把第一个参数数组中的某一段数据复制到第二个数组中

1.源码:

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);
src:     原数组
srcPos: 原数组起始位置(从这个位置开始复制)
dest:   目标数组
destPos:目标数组粘贴的起始位置
length: 复制的个数

2.案例:

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int[] arr2 = {5, 6, 7, 8, 9};
        System.arraycopy(arr, 1, arr2, 0, 3);
        System.out.println(JSON.toJSON(arr2));
    }

3.结果:

[2, 3, 4, 8, 9]

进程已结束,退出代码0
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tan.]der

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值