Was sind boolsche Ausdrücke?

Boolsche Ausdrücke sind Ausdrücke, die einen Wert vom primitiven Typ boolean liefern. Er kann true oder false sein.

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.