Arrays.copyOfRange 是 Java 中高效截取数组片段的核心工具,它创建新数组包含原数组指定范围元素(from 含、to 不含),不修改原数组,支持基本类型和对象数组,对 to 越界自动补默认值,from 负值则抛异常。

Arrays.copyOfRange 是 Java 中高效截取数组片段的核心工具,它能直接创建新数组,包含原数组指定范围内的元素,不修改原数组,且自动处理边界检查。
理解 copyOfRange 的基本用法
该方法签名如下:
public static
其中 original 是源数组,from 是起始索引(包含),to 是结束索引(不包含)。注意:to 可以超过原数组长度,此时新数组末尾会用默认值(如 0、null)填充;但 from 必须 ≥ 0,否则抛 ArrayIndexOutOfBoundsException。
常见截取场景与写法
- 截取前 3 个元素(索引 0 到 2):
Arrays.copyOfRange(arr, 0, 3) - 截取从第 2 个元素到最后:
Arrays.copyOfRange(arr, 1, arr.length) - 截取中间连续 4 个元素(从索引 5 开始):
Arrays.copyOfRange(arr, 5, 9) - 安全截取(避免越界):先判断
Math.min(to, arr.length),再传入,或直接依赖方法内部对to的宽松处理(超出则补默认值)
不同类型数组的使用要点
该方法重载支持所有基本类型(如 int[]、double[])和对象数组(如 String[])。注意:
- 对于基本类型数组,返回同类型新数组;
- 对于引用类型,复制的是引用(浅拷贝),新数组中的对象仍指向原对象;
- 若需深拷贝对象内容,需额外实现(如手动遍历 + clone 或序列化)。
与子数组操作的对比提醒
别混淆 copyOfRange 和 Arrays.asList().subList():
- copyOfRange 返回全新数组,独立于原数组;
- subList 返回的是原列表的视图,修改会影响原集合,且仅适用于 List,不适用于普通数组;
- 普通数组没有内置 “切片” 方法,copyOfRange 就是最直接、最安全的选择。


















