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

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); 
    } 
}

逐步骤分析数组初始化过程

  1. 第一个维度[i]:此时变量i的初始值是4,所以第一个维度的长度被直接设置为4——这就是为什么ia.length是4,而不是你以为的3。
  2. 第二个维度[i=3]:这里是一个赋值表达式,Java会先执行赋值操作(把i的值改成3),然后将赋值表达式的结果(也就是3)作为第二个维度的长度。所以ia中每个元素(即内部的二维数组)的长度都是3。
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:10:48