我读了一些关于一元运算符的帖子: 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
因此在第一个 block 中,x
被分配给 x
并随后递增,但该值从未被使用,否则输出将是 x = 2
。
在第二个 block 中,如果我理解正确的话,第一个 x++
在赋值之前求值,第二个 x++
在赋值之后求值但从未使用过。
如果在第二个 block 中,两个 x++
都在赋值后计算但从未使用过,则输出将为 x = 2
。如果两者都被使用,输出将是 x = 4
。
我的 IDE 还指示使用了第一个 x++
,但没有使用第二个:
总而言之 - 我仍然对何时以及如何确切地完成增量感到困惑。
最佳答案
在线
x = x++ + x++;
假设 x = 1
,第一个 x++
返回“1”作为值,然后它递增 x
到 2。所以基本上,它将旧值分配回 x
。
第二个x++
做同样的事情;它返回 x
的值,现在是 2,然后才将其值递增到 3 - 该值未被使用。
你的代码等同于:
tmp = x;
x = x + 1;
tmp2 = x;
x = x + 1; // not used
x = tmp + tmp2;
可能对您有帮助的链接:
关于java - 后缀一元运算符到底什么时候发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37385528/