a + = a ++ * a ++ * a ++ in Java. Wie wird es bewertet?

8

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.

    
Ashok Bijoy Debnath 13.11.2012, 21:46
quelle

6 Antworten

12

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.

    
jn1kk 13.11.2012, 21:53
quelle
5

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:

  1. x++ ist das Postfix-Inkrement, also wird der Wert von x nach der Auswertung von inkrementiert
  2. * 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%     
Tim Bender 13.11.2012 21:56
quelle
2

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.

    
jedwards 13.11.2012 21:54
quelle
2

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     
Fabian Trottmann 13.11.2012 22:11
quelle
1

Weil ein postincrement die Variable modifiziert, nachdem der Wert genommen wurde und + = seine linke Seite bewertet, bevor sie ihre rechte Seite bewertet,

%Vor%

wird

%Vor%     
Dan 13.11.2012 21:53
quelle
1

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

    
Kevin Welker 13.11.2012 21:54
quelle