为什么java语句评估会像这样发生?

2 java pre-increment post-increment

int z = 1;
System.out.println(z++ == ++z);
System.out.println(++z == z++);
Run Code Online (Sandbox Code Playgroud)

输出将是:

false
true
Run Code Online (Sandbox Code Playgroud)

我不明白为什么,请向我解释一下.

ass*_*ias 10

操作数==从左到右评估,并且++具有更高的优先级,因此您的代码等同于:

int z = 1;
int tmp1 = z++; //tmp1 = 1 / z = 2
int tmp2 = ++z; //tmp2 = 3 / z = 3
System.out.println(tmp1 == tmp2);

tmp1 = ++z; //tmp1 = 4 / z = 4
tmp2 = z++; //tmp2 = 4 / z = 5
System.out.println(tmp1 == tmp2);
Run Code Online (Sandbox Code Playgroud)

我想你明白之间的差别z++++z:

  • tmp1 = z++; 可以分解为: tmp1 = z; z = z + 1;
  • tmp2 = ++z;可以分解为:z = z + 1; tmp2 = z;


Kaz*_*ara 5

int z = 1;
    System.out.println(z++ == ++z);
    System.out.println(++z == z++);
Run Code Online (Sandbox Code Playgroud)

z ++是后增量,++ z是预增量.在计算表达式之后,后增量会增加值,并且预增量会在计算表达式之前增加该值.

因此,

int z = 1;
    System.out.println(z++ == ++z); // 1 == 3 false
    System.out.println(++z == z++);// 4 == 4 true
Run Code Online (Sandbox Code Playgroud)