Seltsames Verhalten Java + = Operator

8

Kann mir das jemand erklären,

%Vor%

wertet der Operator += zuerst die rechte Seite aus und verkettet sie dann mit der linken Seite?

    
confucius 07.02.2012, 18:12
quelle

5 Antworten

11

Der Unterschied hängt mit der Reihenfolge der Operationen zusammen. Folgendes:

%Vor%

entspricht:

%Vor%

Auf der anderen Seite das Folgende:

%Vor%

entspricht:

%Vor%

Beachten Sie den Unterschied bei der Platzierung von Klammern.

Betrachten wir nun die beiden Fälle:

1) str = str + (((char)97) + 2) :

Hier wird 97 + 2 zuerst ausgewertet. Das Ergebnis ist ein int ( 99 ), das in eine Zeichenfolge konvertiert und an str angehängt wird. Das Ergebnis ist "Hello99" .

2) str = (str + ((char)97)) + 2 :

Hier wird (char)97 ( 'a' ) an die Zeichenkette angehängt, und dann wird 2 in Zeichenkette umgewandelt und an das Ergebnis angehängt. Dies ergibt "Helloa2" .

    
NPE 07.02.2012, 18:15
quelle
5

Ja. Der relevante Teil der JLS ist hier: Ссылка

  

Zur Laufzeit wird der Ausdruck auf zwei Arten ausgewertet. Wenn die   Der linke Operandenausdruck ist dann kein Array-Zugriffsausdruck   Vier Schritte sind erforderlich:

     
  • Zunächst wird der linke Operand ausgewertet   eine Variable erzeugen. Wenn diese Auswertung abrupt abgeschlossen wird, dann die   Der Zuweisungsausdruck wird aus dem gleichen Grund abrupt beendet. das   Der rechte Operand wird nicht ausgewertet und es findet keine Zuweisung statt.
  •   
  • Andernfalls wird der Wert des linken Operanden gespeichert und dann der   rechter Operand wird ausgewertet . Wenn diese Auswertung abgeschlossen ist   schlagartig, dann endet der Zuweisungsausdruck abrupt für die   gleicher Grund und keine Zuordnung.
  •   
  • Andernfalls der gespeicherte Wert von   die linke Variable und der Wert des rechten Operanden sind   verwendet, um die durch die Verbindung angegebene binäre Operation durchzuführen   Zuweisungsoperator . Wenn dieser Vorgang abrupt abgeschlossen wird (der einzige   Möglichkeit ist eine ganzzahlige Division durch Null - siehe §15.16.2), dann die   Der Zuweisungsausdruck wird abrupt aus dem gleichen Grund beendet   Zuordnung erfolgt.
  •   
  • Ansonsten ist das Ergebnis der binären Operation   konvertiert in den Typ der linken Variablen und das Ergebnis der   Die Konvertierung wird in der Variablen gespeichert.
  •   

(Hervorhebung von mir.)

    
Hauke Ingmar Schmidt 07.02.2012 18:21
quelle
2

Hier geht es um die Operator-Assoziativität.

%Vor%

würde übersetzt zu:

%Vor%     
kaoD 07.02.2012 18:16
quelle
1

Ihre erste Zeile entspricht:

%Vor%

, während Ihre zweite entspricht:

%Vor%     
Herms 07.02.2012 18:16
quelle
1
%Vor%

weil zuerst die Zeichenfolge '+' ist, wird der Operator als Zeichenfolge concat verwendet (andere Werte werden in eine Zeichenfolge konvertiert)

%Vor%

erste rechte Seite wird zu 99 (zwei Bytesumme) ausgewertet als str + 99 - & gt; Zeichenfolge concat

    
user1190541 07.02.2012 18:19
quelle

Tags und Links