Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

5.8 Operator-Vorrangregeln



Tabelle 5.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-, »P« für primitive und »A« für alle Typen.

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,I L String-Verkettung
4 << I,I L Linksschieben

>> I,I L Rechtsschieben

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

<= L,L L Kleiner gleich

> L,L L Größer

>= L,L 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 5.6: Operator-Vorrangregeln

Etwas unschön ist die Tatsache, daß 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 /* Listing0508.java */
002 
003 public class Listing0508
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 5.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 5.9 (verbessert wurde Zeile 009):

001 /* Listing0509.java */
002 
003 public class Listing0509
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 }
Listing0509.java
Listing 5.9: Korrekte Klammerung von bitweisen Operatoren

Die Ausgabe des Programms ist nun erwartungsgemäß:

LowByte(55) >= LowByte(97)

 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com