int a = 1;
a -= a + a;
Run Code Online (Sandbox Code Playgroud)
上面的代码结果是-1,我期望它是1。
但下面的代码实际上让我得到了 1
a = a - a + a
Run Code Online (Sandbox Code Playgroud)
他们不应该是一样的吗?第一个代码如何变为-1?
我试图研究加法和减法的数学运算顺序,我认为我会对它们的工作原理产生误解。但看起来我通过对计算进行从左到右的操作是正确的。
Java 语言规范写道:
复合赋值表达式的形式
E1 op= E2相当于E1 = (T) ((E1) op (E2)),其中T是 的类型E1,但E1只计算一次。
也就是说,表达式
a -= a + a
Run Code Online (Sandbox Code Playgroud)
相当于
a = (int) ((a) - (a + a))
Run Code Online (Sandbox Code Playgroud)
其评估结果如下
a = (1) - (1 + 1)
Run Code Online (Sandbox Code Playgroud)
-=优先级低于+,因此操作顺序为:
a -= (a + a);
a -= (1 + 1);
a -= 2;
Run Code Online (Sandbox Code Playgroud)
另一方面,-与 、 具有相同的优先级+,并且是左关联的,因此这里的操作顺序是:
a = ((a - a) + a);
a = ((1 - 1) + 1);
a = ( 0 + 1);
a = 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |