2014-11-30 10 views
7

Ich frage mich, was macht der -->---Operator in Java?- -> - - Operator in Java

Zum Beispiel, wenn ich den folgenden Code haben:

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

Dies gibt immer wahr.

Vielen Dank!

+0

http://stackoverflow.com/questions/1642028/what-is-the-name-of-the-operator –

+1

Bezogen auf, aber kein Duplikat der Frage http://StackOverflow.com/Questions/1642028/was-ist-der-Name-des-Operators, weil das ein C++ Programm ist. – Raedwald

+1

Ich denke, dass OP vielleicht die Frage bearbeiten möchte, um den Pseudo-Dupel anzuerkennen, und entsprechend die Unterschiede zwischen Java und C++ umschreiben. Wenn es keine Unterschiede gibt, kann die Frage von geringer Qualität sein. Nichts für ungut. –

Antwort

26

In Java ist -->-- kein Operator.

Was Sie geschrieben haben, ist eigentlich if ((x--) > (--y)).

Und wie wir aus this answer wissen, ist die --y predecrement, während die x-- postdecrement ist, so deshalb, diese im Grunde if (3 > 2) ist, die immer true zurückgibt.

+7

Dies ist wahrscheinlich ein sehr schwieriges Hausaufgabenproblem. Sehr interessant! –

+1

Vielen Dank! – MarkusWillson

2

Positcrement und preicrement sind sehr ähnliche Operatoren. Javas Bytecode gibt ein besseres Verständnis. Jeder von ihnen besteht aus zwei Operationen. Variable laden und inkrementieren. Der einzige Unterschied besteht in der Reihenfolge dieser Operationen. Wenn Aussage von Ihrem Fall wird auf diese Weise zusammengestellt:

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 

Wenn JVM bis zu einer if-Anweisung kommt es 3 und 2 auf dem Stapel hat. Zeile 4 und 5 sind aus x-- zusammengestellt. Linien 8 und 11 von --y. x wird vor Inkrement und y nach geladen.

Übrigens ist es seltsam, dass Javac diesen statischen Ausdruck nicht optimiert.