System.arraycopy
Posted wlcysys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.arraycopy相关的知识,希望对你有一定的参考价值。
1 private void resize() {
2
3 int[] arrayNew = new int[array.length*2]
4 //把以前的数组复制到新的数组
5 System.arraycopy(array,0,arrayNew,0,array.length);
6 array = arrayNew;
7 }
8 转载: https://www.cnblogs.com/WLCYSYS/p/13194286.html
从指定的源数组(从指定位置开始)复制数组到目标数组的指定位置。数组组件的子序列从引用的源数组复制到引用src
的目标数组dest
。复制的组件数等于length
参数。将源数组中位置srcPos
到 的组件srcPos+length-1
分别复制到目标数组中的位置destPos
到 destPos+length-1
。
如果src
和dest
参数是指相同的数组对象,则复制是因为如果组分在位置执行srcPos
通过 srcPos+length-1
首先被复制到一个临时阵列length
组件,然后将临时数组的内容被复制到的位置 destPos
通过destPos+length-1
目标数组的。
如果dest
为null
,则 NullPointerException
抛出。
如果src
为null
,则NullPointerException
抛出 ,并且不修改目标数组。
否则,如果满足以下任一条件,则将ArrayStoreException
引发an 并且不会修改目标:
- 该
src
参数引用的不是数组对象。 - 该
dest
参数引用的不是数组对象。 - 的
src
参数和dest
参数指阵列,其部件类型是不同的原始类型。 - 自
src
变量引用具有原始组件类型的数组,而自dest
变量引用具有参考组件类型的数组。 - 自
src
变量引用具有引用组件类型的数组,而自dest
变量引用具有原始组件类型的数组。
否则,如果满足以下任一条件,则将IndexOutOfBoundsException
引发an 并且不会修改目标:
- 该
srcPos参数为负值。
- 该
destPos参数为负值。
- 该
length参数为负值。
srcPos+length
大于src.length
,源数组的长度。destPos+length
大于dest.length
,目标数组的长度。- 转载: https://www.cnblogs.com/WLCYSYS/p/13194286.html
否则,如果源数组中从位置srcPos
到 位置的任何实际组件srcPos+length-1
都无法通过赋值转换转换为目标数组的组件类型,ArrayStoreException
则会引发an 。在这种情况下,令 k为小于长度的最小非负整数,以使src[srcPos+
k]
无法转换为目标数组的组件类型。当抛出异常,从位置源阵列组件srcPos
通过 srcPos+
?-1
将已经被复制到目标阵列位置 destPos
通过 destPos+
?-1
并且不会修改目标数组的其他位置。(由于已经逐项列出了限制,因此本段仅适用于两个数组都具有引用类型的组件类型的情况。)
- 参数:
- src 源数组。
- srcPos 在源数组中的起始位置。
- dest 目标数组。
- 目标数据中的destPos起始位置。
- length 要复制的数组元素的数量。
- 抛出:
- IndexOutOfBoundsException-如果复制将导致超出数组范围的数据访问。
- ArrayStoreException-如果由于类型不匹配
src
而无法将数组中的元素存储到dest
数组中。 - NullPointerException -如果任一
src
或者dest
是null
。
以上是关于System.arraycopy的主要内容,如果未能解决你的问题,请参考以下文章
System.arraycopy 不抛出 ArrayIndexOutOfBoundsException
System.arraycopy 和Arrays.copyOf
Java 学习笔记 System.arraycopy 复制数组