int x = 3;
System.out.println(x++ + ++x + x++); // 13
Run Code Online (Sandbox Code Playgroud)
为什么结果是13?
我的逻辑:
++x 在中心给44 + 4 + 4 = 12 所以结果必须是12. 我们一步一步来看吧.首先,重要的是要注意表达式是从左到右进行计算,因此没有未定义的行为.
int x = 3;
int res = x++ + ++x + x++
// res = (x++) + (++x) + (x++) with x = 3
// res = 3 + (++x) + (x++) with x = 4
// res = 3 + 5 + (x++) with x = 5
// res = 3 + 5 + 5 with x = 6
// res = 13
Run Code Online (Sandbox Code Playgroud)
这里的关键部分是:
x++返回先前的x值并在x之后递增.关于"后缀增量运算符"的JLS 第15.14.2节++说:
后缀增量表达式的值是存储新值之前的变量值.
++x返回下一个x递增的值.关于"前缀增量运算符"的JLS 第15.15.1节++说:
前缀增量表达式的值是存储新值后变量的值.
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |