Ich stieß auf dieses Problem auf dieser Website und versuchte es in Eclipse, konnte es aber nicht. Ich verstehe, wie genau sie bewertet werden.
%Vor%Laut einem Kommentar in der Website wird x + = x ++ * x ++ * x ++ zu x = x + ((x + 2) * (x + 1) * x) aufgelöst, was sich als wahr herausstellt. Ich denke, dass mir etwas an dieser Operatorpriorität fehlt.
Java wertet Ausdrücke von links nach rechts aus & amp; entsprechend ihrer Priorität.
%Vor%Der Postfix-Inkrement-Operator erhöht die Variable nur, nachdem die Variable verwendet / zurückgegeben wurde. Alles scheint richtig.
Dies ist ein Pseudocode für den Postfix-Inkrementoperator:
%Vor%Von JLS 15.14.2 ( Referenz ):
Der Wert des Postfix-Inkrementausdrucks ist der Wert der Variablen, bevor der neue Wert gespeichert wird.
Es hat nichts mit der Rangfolge des Operators per se zu tun, sondern nur mit der Reihenfolge der Auswertung. Zwei Dinge, die man hier wissen sollte:
x++
ist das Postfix-Inkrement, also wird der Wert von x
nach der Auswertung von inkrementiert *
wertet die rechte Seite und dann die linke Seite aus. Unter Berücksichtigung von Punkt 2 kann der Ausdruck x++ * x++ * x++
genauer als x++ * (x++ * (x++))
umgeschrieben werden.
Der ganze Ausdruck kann als Prozedur geschrieben werden:
%Vor% Der Postfixoperator x++
bedeutet etwas wie "Gib mir jetzt den Wert von x, aber inkrementiere ihn für zukünftige Referenzen"
Also, durch die Reihenfolge der Operationen und Auswertung ,
x++ * x++ * x++
wird zuerst als
interpretiert 3 * 4 * 5
(= 60)
Was dann zu Original 3 hinzugefügt wird und 63 ergibt.
Der ursprüngliche Wert wird verwendet , weil er in derselben Zeile steht , wenn Sie etwa Folgendes geschrieben haben:
%Vor% x
wäre jetzt 66 anstelle von 63, weil die x
in der zweiten Zeile jetzt 6 ist und nicht die ursprüngliche 3.
Weil das Inkrement Operation ++ nach der Variablen x hinzugefügt wird. Das ist eine Post-Inkrement-Operation. Das bedeutet, dass x erhöht wird, nachdem die Operation bearbeitet wurde.
%Vor%Wenn Sie möchten, dass Ihre Variable vor Ausführung der Operation inkrementiert wird, müssen Sie ++ x (Vorinkrementierung)
schreiben unäre Operatoren ausgewertet von links nach rechts, so dass der erste x++
den Wert x
bekommt, der zweite (x+1)
usw. Und das + = wird entsprechend dem Wert von x
am Anfang ausgewertet der Zusatz von x
Tags und Links java post-increment operator-precedence order-of-evaluation