8

我想知道,-->--运算符在 Java 中是做什么的?

例如,如果我有以下代码:

int x = 3;
int y = 3;
if (x -->-- y) {
    return true;
}

这总是返回 true。

谢谢!

4

2 回答 2

26

In Java, -->-- is not actually an operator.

What you wrote is actually if ((x--) > (--y)).

And, as we know from this answer, the --y is predecrement, while the x-- is postdecrement, so therefore, this is basically if (3 > 2), which always returns true.

于 2014-11-30T04:03:20.550 回答
2

Positcrement 和 preicrement 是非常相似的运算符。Java 的字节码提供了更好的理解。它们中的每一个都包含两个操作。加载变量并增加它。唯一的区别在于此操作的顺序。如果您的案例中的陈述以这种方式编译:

 4: iload_1               //load x
 5: iinc          1, -1   //decrement x
 8: iinc          2, -1   //decrement y
11: iload_2               //load y
12: if_icmple     23      //check two values on the stack, if true go to 23rd instruction

当 JVM 出现一个 if 语句时,它已经32堆栈上。第 4 行和第 5 行是从x--. 第 8 行和第 11 行来自--y. x在增量之前和之后加载y

顺便说一句,奇怪的是 javac 没有优化这个静态表达式。

于 2014-12-09T09:13:01.750 回答