如何计算这个表达式

时间:2010-03-06 19:56:28

标签: java

我有一个复合赋值为

的表达式

x + = 2 * 5

所以如何评估它是

x =(x + 2)* 5

x = x +(2 * 5)

为什么?

3 个答案:

答案 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 仅评估一次