Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
<< | < | > | >> | API | Kapitel 6 - Ausdrücke |
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«: |
|
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 } |
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 |
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 |