Arrays.copyOfRange采用左闭右开区间,索引越界直接抛ArrayIndexOutOfBoundsException;from需满足0≤from≤arr.length,to需满足from≤to≤arr.length,新数组长度恒为to-from。

Arrays.copyOfRange 的边界处理规则核心就一条:**左闭右开,且索引越界会直接抛出 ArrayIndexOutOfBoundsException(不是静默截断)**。
起始索引 from 必须 ≥ 0 且 ≤ 原数组长度
from 允许等于原数组长度(此时返回空数组),但不能为负数,也不能超过原数组长度:
- from = 0 → 从头开始
- from = arr.length → 返回 newType[0](空数组)
- from = -1 或 from = arr.length + 1 → 立即抛异常
结束索引 to 必须 ≥ from 且 ≤ 原数组长度
to 是“不包含”的上界,必须不小于 from,且不能超过原数组长度:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- to = from → 返回空数组(合法)
- to = arr.length → 截取到末尾(合法)
- to
- to > arr.length → 抛异常(不会自动截断为 arr.length)
新数组类型和长度由 to - from 决定
无论原数组多长,新数组长度恒为 to - from,类型与原数组一致(泛型数组需注意类型擦除):
立即学习“Java免费学习笔记(深入)”;
- int[] src = {1,2,3,4,5};
int[] sub = Arrays.copyOfRange(src, 1, 4); // {2,3,4},长度=4−1=3 - String[] s = {"a","b"};
String[] t = Arrays.copyOfRange(s, 2, 2); // {},长度=0
常见误用场景提醒
容易踩坑的地方:
- 把 to 当作“包含”下标(实际是排除)
- 假设 to 超出范围会自动修正(实际直接崩溃)
- 对 null 数组调用(抛
NullPointerException) - 在循环中动态计算 to 时未校验是否 ≤ arr.length

















