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
System.arraycopy(Objext src,int srcPos,Object dest,int destPos,int length);

从指定的源数组(从指定位置开始)复制数组到目标数组的指定位置。数组组件的子序列从引用的源数组复制到引用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引发, 并且不会修改目标:
- 该
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。 -
