Java算术自增运算符执行结果差异:为何b与c结果不同?
Java后缀自增运算符的表达式求值问题
先看两段代码的执行结果:
// 结果b=12 int a = 6; int b = a + a++; // 结果c=13 int a = 6; int c = a++ + a;
你疑惑的点是:既然后缀自增运算符优先级更高,为什么结果不是都为13?核心原因是优先级不改变表达式的求值顺序,Java里表达式是严格从左到右求值的,后缀自增的规则是「先取值,再自增」,结合这两点就能解释差异:
对于
a + a++:- 先计算左边的
a,取当前值6; - 再计算右边的
a++,先返回当前值6,随后a自增为7; - 最后做加法:6 + 6 = 12,赋值给
b。
- 先计算左边的
对于
a++ + a:- 先计算左边的
a++,先返回当前值6,随后a自增为7; - 再计算右边的
a,此时a已经是7,取7; - 最后做加法:6 + 7 = 13,赋值给
c。
- 先计算左边的
优先级高只是意味着a++会作为一个独立运算单元,不会被拆分成(a+) + a这类错误结构,但求值的顺序依然是从左到右逐个处理操作数,这才是导致两个结果不同的关键。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

