在复杂的语句中,增量运算符如何在Java中表现

Ada*_*Ary -1 java

int x = 3; 
System.out.println(x++ + ++x + x++); // 13 
Run Code Online (Sandbox Code Playgroud)

为什么结果是13?

我的逻辑:

  1. ++x 在中心给4
  2. 4 + 4 + 4 = 12 所以结果必须是12.

Tun*_*aki 7

我们一步一步来看吧.首先,重要的是要注意表达式是从左到右进行计算,因此没有未定义的行为.

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节++说:

    前缀增量表达式的值是存储新值变量的值.