Rangfolge der Operatoren, von stark zu schwach bindend.
Typ
Symbole
Beispiele
Anmerkungen
Unäre Operatoren
-, !, ++, --
-7 * 4, !myBoolean
Post-Inkrement und -Dekrement erst in nächster Operation sichtbar
Addition, Subtraktion
+, -
7 + 4
Relationale Operatoren
<, >, <=, >=, instanceof
y > x
Gleichheits-Operatoren
==, !=
y != x
Referenz bei Objekten, nicht mi equals verwechseln! Sonderfall String!
Logische Operatoren
&, |
myBool & yourBool
Beide Ausdrücke immer ausgewertet
Short-Circuit-Operatoren
&&, ||
myBool
Ternärer Operator
? :
x == true ? "Hallo" : "Welt"
Reihenfolge rechts nach links!
Zuweisungs-Operatoren
=, +=, -=
x += 5
Zuweisung sehr niedrig priorisiert, und rechts nach links! (a = b = 3)
Bei gleicher Priorität von links nach rechts, durch Klammerung kann Vorrang geändert werden.
Vergleich und Gleichheit vor logischen Operatoren!
Stolperfallen
| vor &&, aber && vor ||, also bei short circuit evaluation aufpassen! Scheint ein Unterschied zwischen logischen und bitweisen Operatoren zu sein. Bitweise haben Vorrang vor logischen:
&&, || nur auf booleschen Ausdrücken definiert, dort short circuit, &, | auch bei ints, dann bitweise und kein boolean als Rückgabe!
Short-circuit verhindert Ausführung der weiteren Anweisungen. Darauf achten, ob Seiteneffekte ausgeführt werden!
Operatoren können in seltenen Fällen unterschiedliche Bedeutung haben (boolean vs. Zahlen, Bit-Shifting)
Nicht alle sind bei allen Datentypen erlaubt (*=)
== und equals bei Objekten beachten. String ist ein Sonderfall, da sogar Art der Erzeugung relevant.
Post-Inkrement bindet stark, ist aber erst in der nächsten Operation sichtbar. Bei return i++ also nicht, wohingegen return i += j sichtbar wird. (Seiteneffekt wird aber ausgeführt, ist also evtl. später sichtbar, bspw. wenn Felder verändert werden!)
Delete Page
Deleting the wiki page "Operator Rangfolge" cannot be undone. Continue?