Die Operatorrangfolge bestimmt die Reihenfolge, in der die Operatoren in einem Ausdruck ausgewertet werden.
Bevor Sie mit dem Lesen dieses Artikels beginnen, sollten Sie über Grundkenntnisse in Java-Operatoren verfügen.
Schauen Sie sich nun die folgende Aussage an:
int myInt = 12 - 4 * 2;
Was wird der Wert von myInt sein? Wird es sein (12 - 4)*2
, das heißt 16
? Oder wird es sein 12 - (4 * 2)
, das heißt 4
?
Wenn zwei Operatoren einen gemeinsamen Operanden haben, wird 4
in diesem Fall der Operator mit der höchsten Priorität zuerst operiert.
In Java ist die Priorität von *
höher als die von -
. Daher wird die Multiplikation vor der Subtraktion durchgeführt, und der Wert von myInt ist 4.
Operator-Rangfolge-Tabelle
In der folgenden Tabelle ist die Priorität von Operatoren in Java aufgeführt. Je höher es in der Tabelle erscheint, desto höher ist seine Priorität.
Java Operator VorrangBetreiber | Vorrang |
---|---|
Postfix-Inkrement und Dekrement | ++ -- |
Präfix inkrementieren und dekrementieren und unär | ++ -- + - ~ ! |
multiplikativ | * / % |
Zusatzstoff | + - |
Verschiebung | << >> >>> |
relational | < > <= >= instanceof |
Gleichberechtigung | == != |
bitweise UND | & |
bitweises exklusives ODER | ^ |
bitweise inklusive ODER | | |
logisches UND | && |
logisches ODER | || |
ternär | ? : |
Zuordnung | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
Beispiel: Operatorrang
class Precedence ( public static void main(String() args) ( int a = 10, b = 5, c = 1, result; result = a-++c-++b; System.out.println(result); ) )
Ausgabe :
2
Die Operatorrangfolge des Präfixes ++
ist höher als die des -
Subtraktionsoperators. Daher,
Ergebnis = a - ++ c - ++ b;
ist äquivalent zu
Ergebnis = a - (++ c) - (++ b);
Wenn Sie mit mehreren Operatoren und Operanden in einem einzigen Ausdruck arbeiten, können Sie der Übersichtlichkeit halber Klammern wie im obigen Beispiel verwenden. Der Ausdruck in den Klammern wird zuerst ausgewertet.
Assoziativität von Operatoren in Java
Wenn ein Ausdruck zwei Operatoren mit ähnlicher Priorität hat, wird der Ausdruck gemäß seiner Assoziativität bewertet (entweder von links nach rechts oder von rechts nach links). Nehmen wir ein Beispiel.
a = b = c;
Hier wird der Wert von c der Variablen b zugewiesen. Dann wird der Wert von b der Variablen a zugewiesen. Warum? Dies liegt daran, dass die Assoziativität des Operators = von rechts nach links ist.
Die folgende Tabelle zeigt die Assoziativität von Java-Operatoren zusammen mit ihrer Assoziativität.
Vorrang und Assoziativität von Java-OperatorenBetreiber | Vorrang | Assoziativität |
---|---|---|
Postfix-Inkrement und Dekrement | ++ -- | links nach rechts |
Präfix inkrementieren und dekrementieren und unär | ++ -- + - ~ ! | rechts nach links |
multiplikativ | * / % | links nach rechts |
Zusatzstoff | + - | links nach rechts |
Verschiebung | << >> >>> | links nach rechts |
relational | < > <= >= instanceof | links nach rechts |
Gleichberechtigung | == != | links nach rechts |
bitweise UND | & | links nach rechts |
bitweises exklusives ODER | ^ | links nach rechts |
bitweise inklusive ODER | | | links nach rechts |
logisches UND | && | links nach rechts |
logisches ODER | || | links nach rechts |
ternär | ? : | rechts nach links |
Zuordnung | = += -= *= /= %= &= ^= |= <<= >>= >>>= | rechts nach links |
Sie müssen sich hier nicht alles merken. In den meisten Fällen ist die Priorität und Assoziativität von Operatoren an sich sinnvoll. Im Zweifelsfall können Sie jederzeit auf diesen Artikel zurückgreifen. Sie können auch Klammern verwenden, wenn Sie der Meinung sind, dass Ihr Code dadurch leichter zu verstehen ist.