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"
.
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.)
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
Tags und Links java operator-keyword