登录
首页 >  文章 >  java教程

JavaArrays.copyOfRange子数组详解

时间:2026-03-27 12:24:40 493浏览 收藏

Java的Arrays.copyOfRange方法采用严格的左闭右开区间语义,from和to必须满足0≤from≤to≤arr.length,越界即抛ArrayIndexOutOfBoundsException而非静默处理;from等于数组长度时返回空数组,to必须不小于from且不可超出原数组边界,新数组长度恒为to-from、类型与原数组一致——掌握这些精确边界规则,能帮你避开循环截取、动态索引等场景中极易发生的崩溃陷阱。

Java Arrays.copyOfRange 截取子数组的边界处理规则

Arrays.copyOfRange 的边界处理规则核心就一条:**左闭右开,且索引越界会直接抛出 ArrayIndexOutOfBoundsException(不是静默截断)**。

起始索引 from 必须 ≥ 0 且 ≤ 原数组长度

from 允许等于原数组长度(此时返回空数组),但不能为负数,也不能超过原数组长度:

  • from = 0 → 从头开始
  • from = arr.length → 返回 newType[0](空数组)
  • from = -1 或 from = arr.length + 1 → 立即抛异常

结束索引 to 必须 ≥ from 且 ≤ 原数组长度

to 是“不包含”的上界,必须不小于 from,且不能超过原数组长度:

  • to = from → 返回空数组(合法)
  • to = arr.length → 截取到末尾(合法)
  • to
  • to > arr.length → 抛异常(不会自动截断为 arr.length)

新数组类型和长度由 to - from 决定

无论原数组多长,新数组长度恒为 to - from,类型与原数组一致(泛型数组需注意类型擦除):

  • 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

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>