在下面的例子中实际发生了什么?
int a = 1;
a += (a = 2);
输出是 3,但是我想知道幕后到底发生了什么。
例如,我知道括号比 +
具有更高的优先级,因此首先发生 (a = 2) 表达式应该变为 a = 2 + 2
。
在运行时,首先应执行括号内的表达式,然后 a 变为 2。似乎 +
左侧的第一个 a
在 之前“加载” (a = 2)
并且这最后一个表达式似乎并没有覆盖之前的加载。
换句话说,我对幕后究竟发生了什么感到很困惑。
如果有人知道,请提前致谢。
最佳答案
来自 JLS section §15.26.2 Compound Assignment Operators :
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
因此对于您的示例,我们有:
a = (a) + (a = 2)
从左到右计算表达式。因此输出 3
关于java - 分配一个变量,实际发生了什么,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303350/