-->--
オペレーターは Javaで何をするのでしょうか?
たとえば、次のコードがあるとします。
int x = 3;
int y = 3;
if (x -->-- y) {
return true;
}
これは常に true を返します。
ありがとうございました!
Java では、-->--
実際には演算子ではありません。
あなたが書いたものは実際にはif ((x--) > (--y))
.
そして、この回答からわかるように、--y はプリデクリメントですが、x-- はポストデクリメントです。したがって、これは基本的if (3 > 2)
に であり、常に を返しますtrue
。
Positcrement と preicrement は非常によく似た演算子です。Java のバイトコードを使用すると、理解が深まります。それぞれが 2 つの操作で構成されます。変数をロードしてインクリメントします。唯一の違いは、この操作の順序です。あなたのケースからの文がこのようにコンパイルされている場合:
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 がこの静的な式を最適化しないのは奇妙です。