Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage
 <<    <     >    >>   API  Kapitel 6 - Ausdrücke

6.8 Operator-Vorrangregeln



Tabelle 6.6 listet alle Operatoren in der Reihenfolge ihrer Vorrangregeln auf. Weiter oben stehende Operatoren haben dabei Vorrang vor weiter unten stehenden Operatoren. Innerhalb derselben Gruppe stehende Operatoren werden entsprechend ihrer Assoziativität ausgewertet.

Die Spalte Typisierung gibt die möglichen Operandentypen an. Dabei steht »N« für numerische, »I« für integrale (also ganzzahlig numerische), »L« für logische, »S« für String-, »R« für Referenz- und »P« für primitive Typen. Ein »A« wird verwendet, wenn alle Typen in Frage kommen, und mit einem »V« wird angezeigt, dass eine Variable erforderlich ist.

Gruppe Operator Typisierung Assoziativität Bezeichnung
1 ++ N R Inkrement

-- N R Dekrement

+ N R Unäres Plus

- N R Unäres Minus

~ I R Einerkomplement

! L R Logisches NICHT

(type) A R Type-Cast
2 * N,N L Multiplikation

/ N,N L Division

% N,N L Modulo
3 + N,N L Addition

- N,N L Subtraktion

+ S,A L String-Verkettung
4 << I,I L Linksschieben

>> I,I L Rechtsschieben

>>> I,I L Rechtsschieben mit Nullexpansion
5 < N,N L Kleiner

<= N,N L Kleiner gleich

> N,N L Größer

>= N,N L Größer gleich

instanceof R,R L Klassenzugehörigkeit
6 == P,P L Gleich

!= P,P L Ungleich

== R,R L Referenzgleichheit

!= R,R L Referenzungleichheit
7 & I,I L Bitweises UND

& L,L L Logisches UND mit vollständiger Auswertung
8 ^ I,I L Bitweises Exklusiv-ODER

^ L,L L Logisches Exklusiv-ODER
9 | I,I L Bitweises ODER

| L,L L Logisches ODER mit vollständiger Auswertung
10 && L,L L Logisches UND mit Short-Circuit-Evaluation
11 || L,L L Logisches ODER mit Short-Circuit-Evaluation
12 ?: L,A,A R Bedingte Auswertung
13 = V,A R Zuweisung

+= V,N R Additionszuweisung

-= V,N R Subtraktionszuweisung

*= V,N R Multiplikationszuweisung

/= V,N R Divisionszuweisung

%= V,N R Restwertzuweisung

&= N,N u. L,L R Bitweises-UND-Zuweisung und Logisches-UND-Zuweisung

|= N,N u. L,L R Bitweises-ODER-Zuweisung und Logisches-ODER-Zuweisung

^= N,N u. L,L R Bitweises-Exklusiv-ODER-Zuweisung und Logisches-Exklusiv-ODER-Zuweisung

<<= V,I R Linksschiebezuweisung

>>= V,I R Rechtsschiebezuweisung

>>>= V,I R Rechtsschiebezuweisung mit Nullexpansion

Tabelle 6.6: Operator-Vorrangregeln

Etwas unschön ist die Tatsache, dass die bitweisen Operatoren schwächer binden als die relationalen Operatoren. Da sie auf einer Stufe mit den zugehörigen logischen Operatoren stehen, gibt es beim Übersetzen des folgenden Programms den Fehler »Incompatible type for &. Can't convert int to boolean«:

 Warnung 

001 /* Listing0608.java */
002 
003 public class Listing0608
004 {
005   public static void main(String[] args)
006   {
007     int i = 55;
008     int j = 97;
009     if (i & 15 < j & 15) {
010       System.out.println("LowByte(55) < LowByte(97)");
011     } else {
012       System.out.println("LowByte(55) >= LowByte(97)");
013     }
014   }
015 }
Listing 6.8: Bindungsprobleme bei den bitweisen Operatoren

Bei der Verwendung der bitweisen Operatoren sind also zusätzliche Klammern erforderlich. Die korrekte Version des Programms zeigt Listing 6.9 (verbessert wurde Zeile 009):

001 /* Listing0609.java */
002 
003 public class Listing0609
004 {
005   public static void main(String[] args)
006   {
007     int i = 55;
008     int j = 97;
009     if ((i & 15) < (j & 15)) { 
010       System.out.println("LowByte(55) < LowByte(97)");
011     } else {
012       System.out.println("LowByte(55) >= LowByte(97)");
013     }
014   }
015 }
Listing0609.java
Listing 6.9: Korrekte Klammerung von bitweisen Operatoren

Die Ausgabe des Programms ist nun erwartungsgemäß:

LowByte(55) >= LowByte(97)

 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0
 <<    <     >    >>   API  © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de