疑问:int a=1时a -= a+a为何结果为-1而非1?
问题解答
首先看两段代码的本质差异:
第一段代码 a -= a + a 的执行逻辑
复合赋值运算符 -= 的运算规则是:a -= expr 等价于 a = a - (expr),这里的expr是整个右侧的表达式,会先完整计算右侧表达式的值,再和左边的原始a做减法。
执行步骤:
- 初始
a = 1 - 先计算右侧的
a + a:1 + 1 = 2 - 再执行
a = a - 2:1 - 2 = -1
最终结果就是-1。
第二段代码 a = a - a + a 的执行逻辑
这是普通的加减运算,遵循从左到右的运算顺序(加减优先级相同):
执行步骤:
- 初始
a = 1 - 先算
a - a:1 - 1 = 0 - 再算
0 + a:0 + 1 = 1
最终结果为1。
为什么二者不等价?
你误以为a -= a + a等价于a = a - a + a,但实际上复合赋值运算符会把右侧整个表达式作为一个整体,相当于给右侧加了隐形括号。如果要让第一段代码和第二段等价,需要写成a -= (a - a),但这显然不是你原本的写法。
内容的提问来源于stack exchange,提问作者WinsenTjhang
相关产品推荐
相关产品推荐

