我有一个复合赋值为
的表达式x + = 2 * 5
所以如何评估它是
x =(x + 2)* 5
或
x = x +(2 * 5)
为什么?
答案 0 :(得分:7)
表格
的表达方式x += expr;
相当于
x = x + (expr);
所以在这种情况下它是
x = x + (2 * 5);
如果隐含地将x
的当前值用于表达式的一部分,那么非常会很奇怪并且令人困惑。
答案 1 :(得分:2)
var op= expr
形式的任何表达式都会计算为var = var op expr
。这在java规范15.26.2 Compound Assignment Operators中定义。
答案 2 :(得分:1)
我看到提到的“运营商优先级”一词,我相信这会让问题变得混乱。考虑一下:
x *= a + b;
即使*
的优先级高于+
,但仍会将其评估为
x = x * (a + b)
完整的解释见JLS 15.26.2 Compound Assignment Operatos:
E1 op = E2 相当于 E1 =(T)((E1)op(E2)),其中 T 是类型 E1 ,但 E1 仅评估一次