Java 学习笔记 System.arraycopy 复制数组
Posted 笑虾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 学习笔记 System.arraycopy 复制数组相关的知识,希望对你有一定的参考价值。
Java 学习笔记 System.arraycopy 复制数组
System.arraycopy 复制数组
public static native void arraycopy(Object src, // 源数组
int srcPos, // 源数组开始复制的位置
Object dest, // 目标数组
int destPos, // 目标数组中的开始位置
int length) // 需要复制的元素个数
从源数组src
的指定位置srcPos
开始复制指定数量length
个元素到目标数组dest
的指定位置destPos
。
源数组中的范围: 从 srcPos
到 srcPos+length-1
。
目标数组中的范围:从 destPos
到 destPos+length-1
。
如果源
与目标
是同一个数组,会先从源数组
放到临时数组
再放到目标数组
。
如果目标数组dest
为null
,抛NullPointerException
。
如果源数组src
为null
,抛NullPointerException
并且目标数组保持不变。
如果有以下任意情况会因为类型不匹配导致存储失败,故而会抛ArrayStoreException
并且目标数组保持不变。
src
参数,不是数组对象。dest
参数,不是数组对象。src
参数和dest
参数的元素是不同的基础类型。src
参数和dest
参数一个是基础类型数组,另一个是引用类型数组。
如果有以下任意情况会导致访问数组越界,故而会抛IndexOutOfBoundsException
并且目标数组保持不变。
srcPos
或destPos
或length
为负数。srcPos + length
>src.length
destPos + length
>dest.length
例:
从源数组
复制到目标数组
(源和目标相同也支持)
int[] src = new int[]1, 2, 3;
int[] dest = new int[]10, 11, 12, 13, 14, 15;
System.arraycopy(src, 0, dest, 1, 3);
System.out.println(JSON.toJSONString(dest)); // [10,1,2,3,14,15]
Arrays.copyOf(源数组, 个数)
如果我们要复制的内容,目标数组放不下,可以使用Arrays.copyOf
- 开始索引默认
0
- 如果目标数组长度不够,会自动扩容量。
- 源数组
original
- 复制个数
newLength
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;
例:
int[] src = new int[]1, 2, 3, 4;
int[] dest = new int[]4, 5, 6;
dest = Arrays.copyOf(src, 10);
System.out.println(JSON.toJSONString(dest)); // [1,2,3,4,0,0,0,0,0,0]
参考资料
java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
java.util.Arrays.copyOf(int[], int)
以上是关于Java 学习笔记 System.arraycopy 复制数组的主要内容,如果未能解决你的问题,请参考以下文章