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

标签 java operators unary-operator

我读了一些关于一元运算符的帖子: 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++,但没有使用第二个: enter image description here

总而言之 - 我仍然对何时以及如何确切地完成增量感到困惑。

最佳答案

在线

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/

相关文章:

c++ - 通过 >> 运算符将文件内容保存到变量

c# - 覆盖等于和类型转换

一元前缀运算符的 Java 消歧

java - 我似乎无法让 replaceAll 工作(删除两个字符串之间的所有内容)

java - 创建对象并在构造函数中使用它

java - 使用 String.format() 处理日历与日期

c++ - C++ 中派生类的等式测试

java -++ 运算符在 Java 中

java - Intellij Idea 无法从其他源找到类文件

java - 不同的间距如何影响一元运算符?