System.arraycopy --全面解释(就是那么有爱心)

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

如果srcdest参数是指相同的数组对象,则复制是因为如果组分在位置执行srcPos通过 srcPos+length-1首先被复制到一个临时阵列length组件,然后将临时数组的内容被复制到的位置 destPos通过destPos+length-1目标数组的。

如果destnull,则 NullPointerException抛出。

如果srcnull,则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或者 destnull 

 

原文地址:https://www.cnblogs.com/WLCYSYS/p/13194286.html