Java二维数组疑问:为何任意大于7的维度值均能正常运行?
为什么更大维度的二维数组不影响你的程序运行?
你的代码能正常工作的核心原因很简单:你只用到了数组的一小部分元素,只要数组的维度足够容纳你实际操作的索引范围,剩下的空间只是闲置,不会干扰程序逻辑。咱们一步步拆解:
1. 先明确你实际用到的数组索引范围
你的循环逻辑是:
- 外层循环
i从0到hoehe+1(也就是0到4,共5个值) - 内层循环
j从0到breite+1(也就是0到7,共8个值)
你对数组的操作是array[j][i] = 'A'或'B',所以:
- 第一维索引
j的最大值是7,这意味着数组第一维的长度只要≥8(因为索引从0开始),就能容纳所有j的取值。你定义的8刚好够,就算改成1854,前8个位置依然可用,剩下的1846个位置根本不会被访问到。 - 第二维索引
i的最大值是4,所以数组第二维的长度只要≥5就行。你定义的9远大于这个需求,多出来的5个位置(索引5-8)完全闲置,不会影响任何操作。
2. Java数组的默认行为
在Java中,创建char数组时,未被赋值的元素会默认初始化为'\u0000'(空字符),但你的代码根本不会去访问这些未赋值的位置——你的输出是直接通过System.out.print打印字符,不是遍历数组输出。所以不管数组剩下的空间有多大,都不会影响你看到的输出结果。
3. 额外提醒:数组索引顺序的小细节
顺便提一句,你定义的是char[][] array = new char[8][9],这表示数组有8个一维子数组,每个子数组有9个char元素。你的操作array[j][i]是正确的,因为j的范围是0-7(对应8个子数组),i的范围是0-4(对应每个子数组的前5个元素),完全在数组的有效索引范围内,不会触发ArrayIndexOutOfBoundsException。
总结一下:只要数组的维度≥你实际用到的最大索引+1,程序就不会报错,更大的数组只是浪费了一点内存,但不会影响逻辑执行——这就是为什么你设成8、9或者1854、8782都能正常工作的原因。
内容的提问来源于stack exchange,提问作者MimsBlue
相关产品推荐
相关产品推荐

