21
Operator Rangfolge
Sebastian Eidecker edited this page 2019-11-03 20:19:26 +00:00

Rangfolge

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!)