【问题标题】:When exactly does postfix unary operator happen?后缀一元运算符究竟何时发生?
【发布时间】:2016-05-23 07:55:30
【问题描述】:

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

所以总结一下 - 我仍然对何时以及如何准确完成增量感到困惑。

【问题讨论】:

标签: java operators unary-operator


【解决方案1】:

排队

x = x++ + x++;

假设x = 1,第一个x++返回“1”作为值,然后它将x增加到2。所以基本上,它将旧值分配回@987654328 @。

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

您的代码相当于:

tmp = x;
x = x + 1;

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

x = tmp + tmp2;

可能对您有所帮助的链接:

【讨论】:

    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2022-11-18
    • 2018-01-18
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多