Java-Grundlagen: Rangfolge der Java-Operatoren

Android Apps Programmieren Online-Kurs

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Die Operatoren werden in Java nach einer genau definierten Reihenfolge ausgewertet. Operatoren eines höheren Ranges bekommen vor Operatoren niedrige Ränge Vorrang.

Diese Spracheigenschaft wird als Vorrangregel oder Bindungsregel bezeichnet.

In Java besitzt jeder Operator eine bestimmte Bindungskraft. So besitzt bspw. der Multiplikations-Operator eine höhere Bindungskraft als der Additions-Operator und wird demnach in Ausdrücken zuerst ausgewertet.

Wie die einfache mathematische Regel: Punktrechnung vor Strichrechnung.

In manchen Fällen besitzen Java-Operatoren die gleiche Bindungskraft also den gleichen Rang, dann entscheidet ihre Assoziativität über die Auswertungsreihenfolge.

So besitzen der Additions– und Subtraktions-Operator alleine gesehen die gleiche Bindungskraft.

Werden sie aber in einer Kette von Additionen und Subtraktionen verwendet, bestimmt ihre Assoziativität über die Auswertungsreihenfolge. In diesem Fall sind beide Operatoren linksassoziativ, daher wird der Ausdruck von links nach rechts ausgewertet.


Daher wird a+b-c wie (a+b)-c ausgewertet und nicht wie a+(b-c).

In der folgenden Tabelle sind alle Java-Operatoren in Gruppen zusammengefasst.

Die Gruppenummer entspricht dem Rang des jeweiligen Operators. Gruppe eins enthält die Java-Operatoren mit dem höchsten Rang. Die Assoziativität gibt an, ob ein Operator von links nach rechts oder von rechts nach links ausgewertet wird.

Gruppe Operator Beispiel Bezeichnung Assoziat. Beschreibung
1 ++ a++ Postinkrement Rechts Beim Postinkrement wird dem übergeordneten Ausdruck der ursprüngliche Wert von a übergeben. Anschließend wird a um 1 erhöht.
– – a- – Postdekrement Rechts Beim Postdekrement wird dem übergeordneten Ausdruck der ursprüngliche Wert von a übergeben. Anschließend wird a um 1 verringert.
++ ++a Präinkrement Rechts Beim Präinkrement wird dem übergeordneten Ausdruck der bereits um 1 erhöhte Wert von a übergeben.
– – – -a Prädekrement Rechts Beim Prädekrement wird dem übergeordneten Ausdruck der bereits um 1 verringerte Wert von a übergeben.
+ +a Positives Vorzeichen Rechts Nicht zwingend, da +a dem gleichen Wert wie a entspricht.
-a Negatives Vorzeichen Rechts Entspricht dem negativem Wert von a.
~ ~a Einerkomplement Rechts Es werden alle Bits von a invertiert, das heißt aus 0 wird 1 und umgekehrt.
! !a Logisches Nicht Rechts Es wird a negiert. Ist a wahr, wird false zurückgegeben, andernfalls true.
(type) (int) a Type-Cast Rechts Der Datentyp von a wird in den in Klammern angegebenen Datentyp umgwandelt.
2 * a * b Multiplikation Links Aus der Multiplikation von a mal b ergibt sich das Produkt.
/ a / b Division Links Aus der Division von a durch b ergibt sich der Quotient.
% a % b Division mit Rest Links Aus der Division mit Rest (Modulo) von a durch b ergibt sich der Rest.
3 + a + b Addition Links Aus der Addition von a plus b ergibt sich die Summe.
a – b Subtraktion Links Aus der Subtraktion von a minus b ergibt sich die Differenz.
+ „A“ + b String-Verkettung Links Ein String wird mit einem anderen String angefügt. Wenn nötig wird dabei der Wert in einen String umgewandelt.
4 << a << b Linksschieben Links Es werden die Bits von a um b Positionen nach links geschoben. Auch das höchstwertige Bit wird nach links geschoben und erfährt keine besondere Behandlung.
>> a >> b Rechtsschieben
mit Vorzeichen
(arithmetisch)
Links Es werden die Bits von a um b Positionen nach rechts geschoben. Das höchstwertige Bit wird nach dem Schieben gesetzt, falls es auch vor dem Schieben gesetzt war. Somit bleibt eine negative Zahl auch nach dem Rechtsschieben negativ.
>>> a >>> b Rechtsschieben
ohne Vorzeichen
(logisch)
Links Es werden die Bits von a um b Positionen nach rechts geschoben. Das höchstwertige Bit wird nach dem Schieben immer auf 0 gesetzt.
5 < a < b Kleiner als Links Es wird a mit b verglichen. Ist a kleiner als b wird true zurückgegeben, andernfalls false.
<= a <= b Kleiner gleich Links Es wird a mit b verglichen. Ist a kleiner als oder gleich b wird true zurückgegeben, andernfalls false.
> a > b Größer als Links Es wird a mit b verglichen. Ist a größer als b wird true zurückgegeben, andernfalls false.
>= a >= b Größer gleich Links Es wird a mit b verglichen. Ist a größer als oder gleich b wird true zurückgegeben, andernfalls false.
instanceof A instanceof B Klassenabfrage Links Es wird geprüft ob das Objekt A eine Instanz der Klasse B ist. Ist dies wahr wird true zurückgegeben, andernfalls false.
6 == a == b Gleich Links Es wird a mit b verglichen. Ist a gleich b wird true zurückgegeben, andernfalls false. Wenn a und b Referenztypen sind, wird verglichen ob beide Variablen auf das gleiche Objekt referenzieren. Falls ja, wird true zurückgegeben.
!= a != b Ungleich Links Es wird a mit b verglichen. Ist a ungleich b wird true zurückgegeben, andernfalls false. Wenn a und b Referenztypen sind, wird verglichen ob beide Variablen auf verschiedene Objekte referenzieren. Falls ja, wird true zurückgegeben.
7 & a & b Und (bitweise) Links Es wird a und b bitweise ausgewertet. Dabei wird jedes korrespondierende Bit von a und b miteinander Und-verknüpft.
& a & b Und (logisch) Links Es wird a und b ausgewertet. Sind beide wahr, wird true zurückgegeben, andernfalls false.
8 ^ a ^ b Exklusiv-Oder (bitweise) Links Es wird a und b bitweise ausgewertet. Dabei wird jedes korrespondierende Bit von a und b miteinander Exklusiv-Oder-verknüpft.
^ a ^ b Exklusiv-Oder (logisch) Links Es wird a und b ausgewertet. Besitzt a einen anderen Wahrheitswert als b wird true zurückgegeben, andernfalls false.
9 | a | b Oder (bitweise) Links Es wird a und b bitweise ausgewertet. Dabei wird jedes korrespondierende Bit von a und b miteinander Oder-verknüpft.
| a | b Oder (logisch) Links Es wird a und b ausgewertet. Ist mindestens einer der beiden Ausdrücke wahr, wird true zurückgegeben, andernfalls false.
10 && a && b Und (S-C-E) Links Es wird a und b ausgewertet. Die Auswertung wird abgebrochen wenn a bereits falsch ist. Dann wird sofort false zurückgegeben. Sind beide wahr, wird true zurückgegeben, andernfalls false.
11 || a || b Oder (S-C-E) Links Es wird a und b ausgewertet. Die Auswertung wird abgebrochen wenn a bereits wahr ist. Dann wird sofort true zurückgegeben. Ist mindestens einer der beiden Ausdrücke wahr, wird true zurückgegeben, andernfalls false.
12 ?: c ? a:b Bedingte Auswertung Rechts Falls die Bedingung c wahr ist, wird der Wert von a zurückgegeben. Andernfalls, wird der Wert von b zurückgegeben.
13 = a = b Einfache Zuweisung Rechts Es wird a der Wert von b zugewiesen und b als Rückgabewert geliefert.
+= a += b Additions-zuweisung Rechts Es wird a das Ergebnis aus a + b zugewiesen und a + b als Rückgabewert geliefert.
-= a -= b Subtraktions-zuweisung Rechts Es wird a das Ergebnis aus a – b zugewiesen und a – b als Rückgabewert geliefert.
*= a *= b Multiplikations-zuweisung Rechts Es wird a das Ergebnis aus a * b zugewiesen und a * b als Rückgabewert geliefert.
/= a /= b Divisions-zuweisung Rechts Es wird a das Ergebnis aus a / b zugewiesen und a / b als Rückgabewert geliefert.
%= a %= b Modulo-zuweisung Rechts Es wird a das Ergebnis aus a % b zugewiesen und a % b als Rückgabewert geliefert.
&= a &= b Und-Zuweisung Rechts Es wird a das Ergebnis aus a & b zugewiesen und a & b als Rückgabewert geliefert.
|= a |= b Oder-Zuweisung Rechts Es wird a das Ergebnis aus a | b zugewiesen und a | b als Rückgabewert geliefert.
<<= a <<= b Linksschiebe-Zuweisung Rechts Es wird a das Ergebnis aus a << b zugewiesen und a << b als Rückgabewert geliefert.
>>= a >>= b Rechtsschiebe-Zuweisung ohne Vorzeichen Rechts Es wird a das Ergebnis aus a >> b zugewiesen und a >> b als Rückgabewert geliefert.
>>>= a >>>= b Rechtsschiebe-Zuweisung ohne Vorzeichen Rechts Es wird a das Ergebnis aus a >>> b zugewiesen und a >>> b als Rückgabewert geliefert.

Comments 3

    1. Post
      Author

      Hallo Timo,

      vielen Dank für deinen Hinweis! Ich habe Zeile 11 jetzt korrigiert.

      Viele Grüße, Chris

  1. Pingback: Operatoren, Ausdrücke und Anweisungen in Java

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.