java中一维数组通过下标索引访问,索引从0开始,最大有效索引为length-1;jvm在每次方括号访问时运行时检查索引是否满足0≤index

一维数组初始化后怎么访问元素
Java中,数组元素通过下标索引访问,索引从0开始,最大有效索引是length - 1。数组名本身不存储数据,而是指向堆中连续内存块的首地址;真正存数据的是那个对象区域。
例如:
-
int[] arr = {10, 20, 30};→arr[0]是 10,arr[2]是 30 -
String[] names = new String[3];→names[1]是 null(引用类型默认值) - 即使只静态初始化前几个值,如
int[] a = new int[]{1, 2};,也只能安全访问a[0]和a[1]
边界检查是怎么起作用的
Java在每次用方括号访问元素时,都会做运行时边界检查:JVM会对比你写的索引值和数组的 length 字段。只要索引 或 >= length,立刻抛出 ArrayIndexOutOfBoundsException。
这个检查不是编译期做的,所以像下面这种写法也能通过编译,但运行必错:
-
int[] b = new int[3]; System.out.println(b[5]);→ 报错 -
int i = -1; System.out.println(b[i]);→ 同样报错 for (int j = 0; j → 循环最后一次必然越界
怎么避免越界又高效访问
核心是把 length 当成“铁律”,而不是可选参考。它不是方法调用,是数组对象的一个final字段,读取开销极小,可放心用于循环条件。
推荐写法:
- 遍历用
for (int i = 0; i ,别写成 <code> - 取最后一个元素写
arr[arr.length - 1],而不是硬编码下标 - 访问前加判断:
if (index >= 0 && index - 对空数组(
length == 0)单独处理,避免-1下标
初始化方式影响访问逻辑吗
不影响边界规则,但会影响初始内容的确定性:
- 动态初始化(
new int[5])→ 所有元素为 0,arr[3]可安全读,值确定 - 静态初始化(
{1, 2})→ 长度固定为 2,arr[2]就是越界,哪怕没显式赋值 - 混合写法(
new int[]{1, 2, 3})→ 效果同静态,长度由大括号内元素个数决定
所有情况中,arr.length 始终准确反映当前合法索引范围,它是你访问安全的唯一标尺。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











