8

-->--オペレーターは Javaで何をするのでしょうか?

たとえば、次のコードがあるとします。

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

これは常に true を返します。

ありがとうございました!

4

2 に答える 2

26

Java では、-->--実際には演算子ではありません。

あなたが書いたものは実際にはif ((x--) > (--y)).

そして、この回答からわかるように、--y はプリデクリメントですが、x-- はポストデクリメントです。したがって、これは基本的if (3 > 2)に であり、常に を返しますtrue

于 2014-11-30T04:03:20.550 に答える
2

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行目--yxインクリメントの前後にロードされますy

ところで、javac がこの静的な式を最適化しないのは奇妙です。

于 2014-12-09T09:13:01.750 に答える