Java数组的length是编译期确定、运行时只读的字段,表示物理容量,索引范围恒为0到length-1,越界抛ArrayIndexOutOfBoundsException。

Java 数组的 length 属性不是方法,而是编译期确定、运行时只读的字段,它直接映射数组在内存中分配的连续空间容量。这个值和索引范围存在硬性数学绑定:索引合法范围永远是 0 到 length - 1(含两端),越界即抛 ArrayIndexOutOfBoundsException。
length 是物理容量,不是逻辑元素个数
数组创建后,length 就固定了,不管有没有显式赋值:
- int[] arr = new int[5]; → arr.length == 5,即使所有元素仍是默认值 0
- String[] names = {"Alice", "Bob"}; → names.length == 2,不是 0 或 null 的数量
- 哪怕把所有元素设为
null或 0,length也不会变
索引最大值恒等于 length - 1
这是 Java 数组底层内存模型决定的——连续块首地址 + 偏移量计算。任何试图访问 arr[arr.length] 或 arr[-1] 的操作都会失败。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 安全获取最后一个元素:
arr[arr.length - 1] - 遍历标准写法:
for (int i = 0; i —— 条件用 <code> 而非 <code> - 错误示范:
if (i 在循环中会导致越界
length 参与边界校验与动态逻辑控制
它不只是“查个数”,更是防止崩溃和支撑算法的关键依据:
立即学习“Java免费学习笔记(深入)”;
- 判空优先检查:
if (arr == null || arr.length == 0) - 复制子数组:
System.arraycopy(src, 0, dst, 0, Math.min(src.length, dst.length)) - 查找最大值时控制循环上限:
for (int i = 0; i ,避免硬编码数字 - 与 ArrayList 的
size()对比:后者可变、需同步;length不可变、无开销、不检查并发
常见误用与排错要点
混淆 length 语义是新手高频错误源:
-
arr.length()→ 编译报错:length 是字段,不是方法 -
list.length→ 编译报错:List 没有 length 字段,要用list.size() -
str.length→ 编译报错:String 没有 length 字段,要用str.length()方法 - 把 length 当作“已填充元素数”来用 → 导致逻辑错(如误判数组为空)

















