后缀一元运算符到底什么时候发生?

When exactly does postfix unary operator happen?

我读了一些关于一元运算符的 post: What is the Difference between postfix and unary and additive in java "C - C++" joke about postfix/prefix operation ordering

还有一些。

但是,我还是不明白究竟是什么时候改变了值。

例如:

int x = 1;
x = x++;
System.out.print("x = x++ ==> ");
System.out.print(" x = " + x);
System.out.println();

int x = 1;
x = x++ + x++;
System.out.print("x = x++ + x++ ==> ");
System.out.print(" x = " + x);
System.out.println();

输出为:

x = x++ ==>  x = 1
x = x++ + x++ ==>  x = 3

所以在第一个块中 x 被分配给 x 然后递增,但该值从未被使用,否则输出将是 x = 2.

在第二个块中,如果我理解正确,第一个 x++ 在赋值之前求值,第二个 x++ 在赋值之后求值但从未使用过。

如果在第二个块中,两个 x++ 都在赋值后计算但从未使用过,则输出将是 x = 2。如果两者都被使用,输出将是 x = 4

我的IDE也说明第一个x++用了,第二个没用:

总而言之 - 我仍然对确切增量完成的时间和方式感到困惑。

x = x++ + x++;

假设x = 1,第一个x++returns“1”作为值,然后递增x到 2. 所以基本上,它将旧值分配回 x.

第二个x++做同样的事情;它 returns x 的值,现在是 2,然后才将其值递增到 3 - 该值未被使用。

您的代码等同于:

tmp = x;
x = x + 1;

tmp2 = x;
x = x + 1; // not used

x = tmp + tmp2;

可能对您有帮助的链接: