arrays.copyofrange 是 java 中高效安全截取数组片段并生成新数组的首选方法,它自动处理边界检查和类型适配,支持基本类型与对象数组,语义清晰、一行完成申请复制返回。

Arrays.copyOfRange 是 Java 中高效、安全地截取数组片段并生成新数组的首选方法,它自动处理边界检查和类型适配,避免手动循环和越界风险。
核心用法:指定起止索引快速切片
copyOfRange 接收原数组、起始索引(含)、结束索引(不含),返回新数组。起始索引可为 0,结束索引最大为原数组长度,超出会抛出 IndexOutOfBoundsException。
- 对 int[] arr = {1, 2, 3, 4, 5},调用 Arrays.copyOfRange(arr, 1, 4) 得到新数组 {2, 3, 4}
- 起始索引等于结束索引时,返回空数组(长度为 0),例如 copyOfRange(arr, 2, 2)
- 结束索引可等于原数组长度,如 copyOfRange(arr, 2, arr.length),等价于截取从索引 2 到末尾
支持所有基本类型与对象数组
该方法是泛型重载的:有针对 int[]、long[]、double[] 等基本类型的专用版本,也有适用于 Object[] 的通用版本。编译器根据传入数组类型自动匹配,无需强制转换。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- String[] words = {"a", "b", "c", "d"};String[] sub = Arrays.copyOfRange(words, 0, 3) → {"a", "b", "c"}
- 使用 Object[] 版本也能处理自定义对象数组,且保留原始引用(浅拷贝)
- 注意:它不支持泛型集合(如 ArrayList),需先转为数组再操作
与 clone() 和 System.arraycopy 对比优势
相比手动 clone()(只能复制整个数组)或 System.arraycopy(需预先创建目标数组且易出错),copyOfRange 更聚焦“按需截取+自动分配”,语义清晰、代码简洁。
- clone() 无法指定范围,且对多维数组只拷贝第一层引用
- System.arraycopy 需提前声明目标数组,长度计算易错,例如:int[] dst = new int[3]; System.arraycopy(src, 1, dst, 0, 3)
- copyOfRange 内部已封装这些细节,一行代码完成“申请+复制+返回”,不易遗漏边界校验
实战技巧:结合流式处理与异常防护
在实际业务中,建议对用户输入的索引做预校验,尤其当起止位置来自外部参数时;也可链式配合 Stream 或 Collections 处理后续逻辑。
- 校验示例:if (from arr.length || from > to) throw new IllegalArgumentException(...)
- 截取后直接转为 List:Arrays.asList(Arrays.copyOfRange(arr, 1, 3)) —— 注意基本类型数组需先装箱
- 与 Optional 结合处理可能为空的切片结果(如 from >= to 时返回空数组,仍属合法情况)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










