Aussagenlogik: Operatoren zur Verknüpfung logischer Ausdrücke in Java
Oftmals genügt es nicht, eine einzelne Bedingung in einer if- oder while-Anweisung zu überprüfen - stattdessen müssen mehrere Bedingungen geprüft werden. So ist beispielsweise ein Jahr dann ein Schaltjahr, wenn es
- durch 4, aber nicht durch 100 teilbar ist oder
- durch 400 teilbar ist.
Um die Kombination von logischen Ausdrücken zu ermöglichen, gibt es in Java einige weitere Operatoren, die die Verkettung boolescher Ausdrücke ermöglichen. Die wichtigsten dieser Operatoren sind in dieser Tabelle dargestellt (weitere Operatoren finden Sie bspw. in Kapitel 2.4.7 in "Java ist auch eine Insel".):
Operator | Beschreibung | Beispiel |
&& | logisches UND | if (a && b && c) { ... |
|| | logisches ODER | if (a || b || c) {... |
! | Negation | if (!a) {... |
Bei den Operatoren "&&" und "||" handelt es sich um sogenannte "Kurz-Schluss-Operatoren": Wenn eine Bedingung wie
ausgewertet werden soll, müssen die einzelnen Funktionen aufgerufen werden, um das Ergebnis des Gesamtausdrucks zu berechnen - dies kostet unter Umständen viel Zeit, obwohl es u.U. nicht notwendig ist, wirklich alle Einzelwerte zu berechnen: Liefert beispielsweise die Methode "boolescheFunktion1()" in obigem Beispiel den Wert "false" zurück, so kann der Gesamtausdruck nicht mehr wahr werden, d.h. die Methode boolescheFunktion1() muss nicht mehr aufgerufen werden, um den Wahrheitswert des Gesamtausdrucks zu ermitteln. Ähnliches gilt für einen Ausdruck wie
denn hier ist der Gesamtausdruck wahr, wenn boolescheFunktion1() den Wert true zurückgibt, ganz egal, was die zweite Methode zurückgeben wird.
Die "Kurz-Schluss-Operatoren" nutzen diese Beobachtung aus und brechen die Berechnung der Teilergebnisse ab, wenn der Wahrheitswert des Gesamtausdrucks feststeht (Zur Veranschaulichung betrachten Sie das Beispielprogramm KurzSchlussOperatoren.zip im Debugger).
Manchmal ist es notwendig, dass alle beteiligten Methoden aufgerufen werden sollen, d.h. das Kurz-Schluss-Verhalten ist nicht erwünscht - in diesem Fall können die Operatoren "&" und "|" eingesetzt werden. I.d.R. sollten die Kurz-Schluss-Varianten jedoch den Anforderungen genügen, während der Einsatz von "&" und "|" oft zu Programmierfehlern oder unerwünschten Seiteneffekten führen kann.