arrays.copyofrange 是 java 中语义清晰、边界安全的数组切片工具,支持任意子区间复制,自动补默认值且不抛异常(仅索引非法时触发 arrayindexoutofboundsexception),比 clone、system.arraycopy 等更简洁可靠。

Arrays.copyOfRange 是 Java 中专为“取一段”设计的数组切片工具,语义清晰、边界安全、无需手动预分配,适合分页、日志截断、并发处理等场景。
核心用法:三参数搞定区间复制
调用形式统一为 Arrays.copyOfRange(original, from, to),其中:
- from 是起始索引(包含),必须 ≥ 0 且 ≤ original.length
- to 是结束索引(不包含),必须 ≥ from,但可大于 original.length(超出部分自动填默认值)
- 返回新数组,长度恒为
to - from,类型与原数组一致
常见实用写法
无需额外判断,一行代码完成典型切片需求:
- 取前 N 个:
Arrays.copyOfRange(arr, 0, N) - 跳过前 M 个取剩余:
Arrays.copyOfRange(arr, M, arr.length) - 复制整个数组(等价于 clone):
Arrays.copyOfRange(arr, 0, arr.length) - 提取中间片段(如第 5~9 个元素):
Arrays.copyOfRange(arr, 5, 10)
关键细节与避坑点
看似简单,但几个细节直接影响健壮性:
- 空数组合法:
Arrays.copyOfRange(new int[0], 0, 0)返回长度为 0 的新数组,不抛异常 - 越界容忍:若
to > arr.length,多出位置自动补 0(int)、null(引用类型),不会报错 - 引用数组只拷贝引用:String[]、Order[] 等拷贝后仍指向原对象,修改对象内容会影响两边
- 索引非法时才抛异常:仅当
from 或 <code>from > arr.length或from > to时触发 ArrayIndexOutOfBoundsException
为什么它比其他方式更适合切片
对比常用替代方案,copyOfRange 在切片场景中优势明确:
- 比
clone()灵活:支持任意子区间,不止全量复制 - 比
System.arraycopy()简单:不用提前 new 目标数组,也不用计算偏移和长度 - 比手动循环可靠:内置索引校验,避免 off-by-one 错误
- 比
Arrays.copyOf()精准:后者靠长度截断,无法指定起始位置
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











