数组复制--System.arraycopy
System.arraycopy
是 Java 中用于高效复制数组的内置方法。它位于 java.lang.System
类中,提供了一种快速、直接的方式来复制数组的一部分或全部元素。
方法签名
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数说明
- src:源数组(被复制的数组)
- srcPos:源数组的起始位置(从哪个索引开始复制)
- dest:目标数组(复制到哪个数组)
- destPos:目标数组的起始位置(从哪个索引开始粘贴)
- length:要复制的元素个数
关键特性
- 高效性:该方法是原生方法(由 JVM 底层实现),通常比手动循环复制数组快得多。
- 支持不同类型数组:可以复制基本数据类型(如
int[]
,char[]
)和引用类型(如Object[]
)。 - 数组类型必须兼容:源数组和目标数组必须是相同类型(或兼容的子类)。
- 允许重叠复制:如果源数组和目标数组是同一个数组,且复制区域有重叠,方法会正确处理。
注意事项
- 空指针异常:如果
src
或dest
为null
,会抛出NullPointerException
。 - 数组越界:如果
srcPos
、destPos
或length
参数不合法(如负数、超出数组长度),会抛出ArrayIndexOutOfBoundsException
。 - 类型不匹配:如果源数组和目标数组的元素类型不兼容(如
int[]
和String[]
),会抛出ArrayStoreException
。 - 性能考虑:对于大型数组,
System.arraycopy
比手动循环复制快得多,但对于小型数组,差异可能不明显。
与其他复制方式的对比
-
手动循环:
java
for (int i = 0; i < length; i++) {dest[destPos + i] = src[srcPos + i]; }
手动循环更灵活,但性能较低,尤其在处理大型数组时。
-
Arrays.copyOf():
java
int[] newArray = Arrays.copyOf(oldArray, newLength);
该方法内部调用
System.arraycopy
,适合创建新数组并复制原有内容。 -
clone () 方法:
int[] cloneArray = originalArray.clone();
用于创建数组的浅拷贝,内部也依赖
System.arraycopy
。