Was sind boolsche Ausdrücke?
Boolean ist ein primitiver Datentyp, der die Werte true
oder false
annehmen kann. Er dient im Wesentlichen zur
Unterscheidung ob eine Bedingung zutrifft oder nicht und in der
Folge dessen, ob und welche Anweisungen ausgeführt werden. Die
Syntax der Fallunterscheidungen selbst wird in den Artikeln zur if-Verzweigung
und zur switch-case-Verzweigung
behandelt.
boolean b = true; if(b) { System.out.println("b ist true"); }
Boolsche Ausdrücke sind häufig zusammengesetzt, sodass mehrere boolsche Werte gemeinsam ausgewertet werden.
boolean a = false; boolean b = true; System.out.println("a:false, b: true, (a && b) - " + (a && b)); //false System.out.println("a:false, b: true, (a || b) - " + (a || b)); // true a = true; b = true; System.out.println("a:true, b: true, (a && b) - " + (a && b)); // true System.out.println("a:true, b: true, (a || b) - " + (a || b)); // true a = false; b = false; System.out.println("a:false, b: false, (a && b) - " + (a && b)); // false System.out.println("a:false, b: false, (a || b) - " + (a || b)); // false
Bei der Auswertung der den OR-Operator (||
) nutzenden
Ausdrücke muss die Reihenfolge berücksichtigt werden, da
Java einen Mechanismus unterstützt, der als Short-circuit
evaluation bekannt ist. Darunter ist zu verstehen, dass, von
links beginnend, die einzelnen Ausdrücke eines
zusammengesetzten Ausdrucks nur dann ausgewertet werden, wenn das
Ergebnis des Gesamtausdrucks noch nicht eindeutig feststeht.
int i = 0; String s = null; (i == 0 || s.length() != 0) // true (s.length() != 0 || i == 0) // java.lang.NullPointerException (i == 0 && s.length() != 0) // java.lang.NullPointerException (s.length() != 0 && i == 0) // java.lang.NullPointerException
Das obige Beispiel demonstriert das Gesagte: Es werden zwei
Variablen deklariert, von denen der String mit null
initialisiert wird. Greift man auf dessen Methode String.length()
zu, wird deshalb eine java.lang.NullPointerException
geworfen.
Beim ersten Beispiel steht durch die Verwendung des
OR-Operators bereits nach der Auswertung des ersten Teilausdrucks, i == 0
fest, dass der Gesamtausdruck auf jeden Fall true
liefert. Der zweite Teilausdruck wird deshalb gar nicht mehr
evaluiert. Beim zweiten Beispiel wird als erster Teilausdruck der String
abgefragt und deshalb eine Exception geworfen. Bei den dann
folgenden zwei Ausdrücken ist zu einer endgültigen Aussage
über den Wert des Gesamtausdrucks die Auswertung von s.length() != 0
aufgrund des AND-Operators zwingend notwendig, was zum
erwähnten Fehler führt.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.