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

Java含一元运算符时的优先级处理及代码计算错误排查咨询

问题分析与解答

首先看你的代码:

int a=5,b=10,c;
c = ++b * ++a - a++ ;
System.out.println(c);

你的错误核心是混淆了运算符优先级和表达式的求值顺序,同时错误地提前计算了后缀自增a++,完全搞反了执行顺序。

正确的计算步骤(严格遵循Java的求值规则)

初始值:a=5,b=10

  1. 先计算乘法左侧的++b:前缀自增会先修改变量值,再返回新值。所以b变为11,这个表达式的结果是11。
  2. 再计算乘法右侧的++a:同理,a变为6,这个表达式的结果是6。
  3. 执行乘法运算:11 * 6 = 66(乘法优先级高于减法,所以先算乘法)。
  4. 计算减法右侧的a++:后缀自增会先返回变量当前值,再修改变量。此时a的值是6,所以这个表达式的结果是6,之后a才会变为7。
  5. 执行减法运算:66 - 6 = 60,最终赋值给c。

你错在哪里?

  • 你错误地先计算了后缀a++,但Java中表达式的求值顺序是从左到右,减法右侧的a++要等到乘法运算完成后才会执行。
  • 你错误地把++a的结果算成7,实际上++a是在乘法阶段执行,此时a初始是5,自增后是6,而非7——a变成7是在a++执行之后的事。

内容的提问来源于stack exchange,提问作者Anshul V. Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:35:28