Java中多维数组赋值机制及三维数组长度计算疑问
Java多维数组初始化的求值顺序问题
这个问题的核心在于Java数组创建时,维度长度表达式的求值顺序是从左到右的,咱们一步步拆解你的代码就能明白为什么输出是4, 3, 3了。
先看你的代码:
class Test { public static void main(String[] args) { int i = 4; int ia[][][] = new int[i][i=3][i]; System.out.println(ia.length + ", " + ia[0].length + ", " + ia[0][0].length); } }
逐步骤分析数组初始化过程
- 第一个维度
[i]:此时变量i的初始值是4,所以第一个维度的长度被直接设置为4——这就是为什么ia.length是4,而不是你以为的3。 - 第二个维度
[i=3]:这里是一个赋值表达式,Java会先执行赋值操作(把i的值改成3),然后将赋值表达式的结果(也就是3)作为第二个维度的长度。所以ia中每个元素(即内部的二维数组)的长度都是3。 - 第三个维度
[i]:此时i已经被上一步的赋值操作改成3了,所以第三个维度的长度自然是3。
为什么你的预期和实际不符?
你可能误以为i=3会先执行,把i改成3后再计算所有维度,但Java的语言规范明确规定:数组创建表达式中,各个维度的长度表达式是从左到右依次求值的,每个表达式的结果会立即用来确定对应维度的长度,后续表达式的求值会使用变量当前的最新值。
举个验证例子:如果把代码改成new int[i=3][i][i],输出就会是3,3,3;如果改成new int[i][i][i=3],输出就是4,4,3——这完全符合从左到右的求值逻辑。
内容的提问来源于stack exchange,提问作者Shahid Sarwar
相关产品推荐
相关产品推荐

