You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 23:02:46