Java含一元运算符时的优先级处理及代码计算错误排查咨询
问题分析与解答
首先看你的代码:
int a=5,b=10,c; c = ++b * ++a - a++ ; System.out.println(c);
你的错误核心是混淆了运算符优先级和表达式的求值顺序,同时错误地提前计算了后缀自增a++,完全搞反了执行顺序。
正确的计算步骤(严格遵循Java的求值规则)
初始值:a=5,b=10
- 先计算乘法左侧的
++b:前缀自增会先修改变量值,再返回新值。所以b变为11,这个表达式的结果是11。 - 再计算乘法右侧的
++a:同理,a变为6,这个表达式的结果是6。 - 执行乘法运算:
11 * 6 = 66(乘法优先级高于减法,所以先算乘法)。 - 计算减法右侧的
a++:后缀自增会先返回变量当前值,再修改变量。此时a的值是6,所以这个表达式的结果是6,之后a才会变为7。 - 执行减法运算:
66 - 6 = 60,最终赋值给c。
你错在哪里?
- 你错误地先计算了后缀
a++,但Java中表达式的求值顺序是从左到右,减法右侧的a++要等到乘法运算完成后才会执行。 - 你错误地把
++a的结果算成7,实际上++a是在乘法阶段执行,此时a初始是5,自增后是6,而非7——a变成7是在a++执行之后的事。
内容的提问来源于stack exchange,提问作者Anshul V. Kumar
相关产品推荐
相关产品推荐

