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

允许new int[] {0}[0] = 1;正常编译的Java语法规则是什么?

你对JLS语法规则的理解存在偏差,问题出在你只孤立查看了ArrayAccess的单条语法定义,没有结合Java表达式体系的递归规则来看:

Java的表达式语法有明确的层级递归关系:

  • 数组创建表达式new int[] {0}属于首要表达式(Primary)
  • 首要表达式属于后缀表达式(PostfixExpression)
  • 后缀表达式的语法规则明确允许:任意合法的后缀表达式后,跟上用方括号包裹的下标表达式,整体构成合法的数组访问表达式

对应到你的示例代码中,new int[] {0}本身是合法的后缀表达式,后续追加[0]完全符合后缀表达式的语法要求,最终得到的new int[] {0}[0]是合法的数组访问结果,属于可被赋值的左值,因此整个赋值表达式可以正常编译。
你提到的ArrayAccess语法定义里的「前半部分只能是表达式名或PrimaryNoNewArray」,是数组访问的基础无递归的最简形式,完整的语法体系通过后缀表达式的递归规则,已经覆盖了数组创建表达式作为数组访问左部的场景,不属于规范疏漏。

内容的提问来源于stack exchange,提问作者Geoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:57:04