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

Java中a = a + ++a表达式运行结果为21与预期22不符的疑问

核心原因:Java表达式操作数的求值顺序优先于运算符优先级规则

首先明确Java语言的底层规则:

  • 操作数的求值顺序固定为从左到右,这个规则优先级高于运算符优先级规则
  • 运算符优先级仅决定运算的绑定关系,不会改变操作数的求值先后顺序

代码执行过程逐行拆解

你给出的代码逻辑:

int a=10;
a = a + ++a;
System.out.println(a);

执行a = a + ++a时的完整步骤:

  1. 先对加法运算符+的左操作数a求值:此时a的取值为10,该值被暂存等待运算
  2. 再对加法运算符+的右操作数++a求值:前置自增先修改a的取值为11,返回运算结果11
  3. 执行加法运算:将前两步暂存的操作数相加,即 10 + 11 = 21
  4. 将加法结果赋值给变量a,最终a的取值为21

常见误区纠正

你之前的理解误区在于把运算符优先级和操作数求值顺序的优先级搞反了:++优先级更高仅说明++会和紧邻的a绑定,作为加法的右操作数整体,不代表整个表达式中要先计算所有高优先级运算符,再回头求左操作数的值。

你可以做个验证:如果把表达式改成a = ++a + a,最终输出就是你预期的22,因为此时左操作数先执行前置自增得到11,右操作数取最新的a值11,相加结果为22。

规范依据

Java语言规范(JLS)第15.7节「操作数求值顺序」明确规定:Java中所有运算符的操作数都按照从左到右的顺序求值,该规则没有例外,不受运算符优先级或结合性影响。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:02