arrays.copyofrange 是 java 中用于截取数组并返回新副本的静态方法,不修改原数组,参数需满足索引边界条件,自动创建新数组且内置边界检查。

Arrays.copyOfRange 是 Java 中 java.util.Arrays 类提供的一个静态方法,专门用于从原数组中复制指定范围的元素,生成一个**新数组**。它不是“修改原数组”,而是“截取并返回副本”,这点和 Python 的切片类似,但需注意索引边界规则。
基本用法与参数含义
方法签名如下:
public static三个关键参数:
-
original:源数组(不能为空,否则抛
NullPointerException) -
from:起始索引(包含),必须 ≥ 0 且 ≤
original.length -
to:结束索引(不包含),必须 ≥
from且 ≤original.length
若索引越界(如 from > to 或超出数组长度),会直接抛出 IllegalArgumentException 或 ArrayIndexOutOfBoundsException。
截取常见场景示例
假设有一个整型数组:int[] arr = {1, 2, 3, 4, 5};
- 取前 3 个元素:
Arrays.copyOfRange(arr, 0, 3)→{1, 2, 3} - 取后 2 个元素:
Arrays.copyOfRange(arr, 3, 5)→{4, 5} - 跳过首尾各 1 个:
Arrays.copyOfRange(arr, 1, 4)→{2, 3, 4} - 截取空范围(合法):
Arrays.copyOfRange(arr, 2, 2)→ 空数组{}
处理 null 和泛型数组
该方法对引用类型同样适用,但要注意:
- 源数组为
null时,直接抛异常;不能靠它判空再截取 - 对于泛型数组(如
String[]),方法能正确推断类型,无需强制转换 - 原始类型数组(
int[]、double[]等)有对应重载方法,如copyOfRange(int[], int, int),编译器自动选择
和 subList 或 System.arraycopy 的区别
它不同于 List.subList(返回视图,改动影响原集合),也不同于 System.arraycopy(需手动创建目标数组并指定位置)。copyOfRange 更简洁安全:
- 自动创建合适长度的新数组,无需预先分配
- 内部已做边界检查,比手写循环或
arraycopy更少出错 - 语义清晰:“我要一个从 A 到 B 的副本”,一行代码搞定











