我想知道,-->--
运算符在 Java 中是做什么的?
例如,如果我有以下代码:
int x = 3;
int y = 3;
if (x -->-- y) {
return true;
}
这总是返回 true。
谢谢!
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
.
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 语句时,它已经3
在2
堆栈上。第 4 行和第 5 行是从x--
. 第 8 行和第 11 行来自--y
. x
在增量之前和之后加载y
。
顺便说一句,奇怪的是 javac 没有优化这个静态表达式。