arrays.copyofrange 是 java 中最直观、安全的数组截取工具,三参数一步生成独立副本,不改原数组,自动校验边界,适合绝大多数按需取段场景。

Arrays.copyOfRange 是 Java 中最直观、安全的数组截取工具,三参数一步生成独立副本,不改原数组,自动校验边界,适合绝大多数按需取段的场景。
核心用法:三参数明确范围
调用形式统一为 Arrays.copyOfRange(original, from, to),其中:
- from 是起始索引(包含),必须 ≥ 0 且 ≤ original.length
- to 是结束索引(不包含),必须 ≥ from 且 ≤ original.length
- 实际复制区间为 [from, to),长度为
to - from
例如:int[] arr = {1, 2, 3, 4, 5};Arrays.copyOfRange(arr, 1, 4) → {2, 3, 4}(取第 2 到第 4 个元素,不含索引 4)
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
边界行为与常见陷阱
该方法对越界非常严格,但也有明确规则:
- 若
from 或 <code>to > original.length或from > to,直接抛ArrayIndexOutOfBoundsException - 当
from == to时,返回长度为 0 的空数组,合法且无需额外判空 - 空数组调用
copyOfRange(new int[0], 0, 0)返回空数组;但copyOfRange(new int[0], 0, 1)会报错 -
注意:to 超出原数组长度时,不会自动补默认值,而是截断至
original.length—— 即Arrays.copyOfRange(arr, 0, 10)对长度为 3 的数组,只返回前 3 个元素
类型支持与内存语义
它适用于所有数组类型,但拷贝语义有本质区别:
- 对 基本类型数组(如
int[]、double[]):复制的是值,新旧数组完全隔离 - 对 引用类型数组(如
String[]、MyObj[]):复制的是引用,新数组元素仍指向原对象;若需深拷贝,须另行处理对象本身 - 泛型擦除下,编译器自动推导类型,无需手动指定
<string></string>等;传入int[]就返回int[],不会转成Integer[]
对比其他拷贝方式:为什么选它?
相比其他常用手段,copyOfRange 的优势在于平衡性与易用性:
- 比
clone()灵活:能取任意子段,不止全量复制 - 比
System.arraycopy()简单:无需提前创建目标数组、不用计算偏移量、自动做边界检查 - 比手动循环可靠:避免索引错位、越界漏判等低级错误
- 比
List.subList()独立:返回真实新数组,非视图,修改互不影响
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










