java数组下标从0开始到length-1结束,由语言规范、内存模型和工程实践共同决定;arr[0]为首元素,arr[length]越界,循环标准写法为for(int i=0; i

Java 数组的下标从 0 开始,到 length - 1 结束,这不是随意设计,而是由语言规范、内存模型和工程实践共同决定的。
下标从 0 开始是硬性规则
Java 继承自 C 语言的数组语义,首元素地址即为数组基址,下标 0 表示“偏移 0 个元素单位”。这意味着:
- arr[0] 总是第一个元素,无论数组多长
- 不存在 arr[1] 是“第一个”的情况,写 arr[1] 就是访问第二个元素
- 试图访问 arr[-1] 或 arr[length] 会立即抛出 ArrayIndexOutOfBoundsException
length - 1 是最后一个合法位置
数组长度 arr.length 是一个 public final int 字段,表示元素总个数。它不等于最大下标,而是最大下标加 1:
- 长度为 1 的数组:只有 arr[0] 合法,arr[1] 越界
- 长度为 10 的数组:下标范围是 0 ~ 9,不是 1 ~ 10
- 循环遍历时的标准写法是 for (int i = 0; i ,不是
为什么不是从 1 开始?
零基索引不是历史包袱,而是有实际优势:
- 内存计算简洁:arr[i] 对应地址 base + i × element_size,无需额外减法
- 区间表达自然:长度为 n 的子序列,用 [start, start + n) 表示,右边界即为下一个起始点
- 与主流生态一致:C、C++、Python、JavaScript、Go 等均采用 0-based,降低跨语言理解成本
容易踩坑的几个地方
初学者常因混淆概念导致运行时异常:
- 把 arr.length 当作最大下标,误写 arr[arr.length]
- 循环条件写成 i (虽等价但冗余,且易错写成 )
- 在增强 for 循环中误以为需要下标,其实它不提供索引,需改用传统 for 或配合计数器
- 多维数组每一维都独立遵循 0 开始,如 matrix[2][3] 是第 3 行第 4 列,不是“第 2 行第 3 列”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











