Einführung
In diesem Lab lernen Sie, wie Sie in Java prüfen können, ob eine boolesche Variable true ist. Wir werden die grundlegende Methode mithilfe des Gleichheitsoperators untersuchen, uns mit der Behandlung der Boolean-Wrapper-Klasse befassen und besprechen, wie Sie potenzielle Nullwerte verwalten können.
Durch praktische Beispiele gewinnen Sie praktische Erfahrung beim Schreiben von bedingter Logik basierend auf booleschen Werten, um sicherzustellen, dass Ihr Java-Code robust ist und verschiedene Szenarien effektiv behandelt.
Gleichheitsoperator zur Prüfung auf 'true' verwenden
In diesem Schritt werden wir untersuchen, wie Sie in Java mithilfe des Gleichheitsoperators prüfen können, ob eine boolesche Variable true ist. Auch wenn dies auf den ersten Blick einfach erscheint, ist es wichtig, die Feinheiten zu verstehen, um sauberen und korrekten Code zu schreiben.
In Java kann der boolean-Datentyp einen von zwei Werten annehmen: true oder false. Wenn Sie eine boolesche Variable haben, müssen Sie oft ihren Wert prüfen, um Entscheidungen in Ihrem Programm zu treffen.
Der gebräuchlichste Weg, um zu prüfen, ob eine boolesche Variable true ist, ist die Verwendung des Gleichheitsoperators ==.
Erstellen wir ein einfaches Java-Programm, um dies zu demonstrieren.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor, wenn sie noch nicht geöffnet ist.Ersetzen Sie den gesamten Inhalt der Datei durch folgenden Code:
public class HelloJava { public static void main(String[] args) { boolean isJavaFun = true; if (isJavaFun == true) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); } } }Schauen wir uns die neuen Teile dieses Codes an:
boolean isJavaFun = true;: Diese Zeile deklariert eine boolesche Variable namensisJavaFunund initialisiert sie mit dem Werttrue.if (isJavaFun == true): Dies ist eineif-Anweisung. Sie prüft, ob die Bedingung in den Klammerntrueist. Die BedingungisJavaFun == trueverwendet den Gleichheitsoperator==, um den Wert der VariableisJavaFunmit dem booleschen Literaltruezu vergleichen.System.out.println("Java is fun!");: Diese Zeile wird ausgeführt, wenn die BedingungisJavaFun == truetrueist.else: Dieses Schlüsselwort leitet den Codeblock ein, der ausgeführt wird, wenn dieif-Bedingungfalseist.System.out.println("Java is not fun.");: Diese Zeile wird ausgeführt, wenn die BedingungisJavaFun == truefalseist.
Speichern Sie die Datei (Strg+S oder Cmd+S).
Kompilieren Sie das Programm mit dem Befehl
javacim Terminal:javac HelloJava.javaWenn keine Fehler auftreten, wird im Verzeichnis
~/projecteine DateiHelloJava.classerstellt.Führen Sie das kompilierte Programm mit dem Befehl
javaaus:java HelloJavaSie sollten die folgende Ausgabe sehen:
Java is fun!Dies bestätigt, dass die
if-BedingungisJavaFun == truezutrueausgewertet wurde und die entsprechende Nachricht ausgegeben wurde.
Während die Verwendung von == true vollkommen gültig und leicht zu verstehen ist, können Sie in Java die Prüfung auf true vereinfachen. Da die if-Anweisung bereits den Ausdruck in den Klammern als booleschen Wert auswertet, können Sie direkt die boolesche Variable selbst als Bedingung verwenden.
Ändern wir den Code, um diesen vereinfachten Ansatz zu verwenden:
Öffnen Sie
HelloJava.javaerneut im Editor.Ändern Sie die
if-Anweisung wie folgt:if (isJavaFun) { System.out.println("Java is fun!"); } else { System.out.println("Java is not fun."); }Beachten Sie, dass wir
== trueentfernt haben. Die Anweisungif (isJavaFun)ist äquivalent zuif (isJavaFun == true).Speichern Sie die Datei.
Kompilieren Sie das geänderte Programm:
javac HelloJava.javaFühren Sie das Programm erneut aus:
java HelloJavaSie erhalten die gleiche Ausgabe:
Java is fun!Dies zeigt, dass die direkte Verwendung der booleschen Variable in der
if-Bedingung ein kompakterer und idiomatischer Weg ist, um zu prüfen, ob sietrueist.
Zusammenfassend können Sie den Gleichheitsoperator == true verwenden, um zu prüfen, ob ein boolescher Wert true ist. Der gebräuchlichere und sauberere Weg ist jedoch, einfach die boolesche Variable selbst als Bedingung in einer if-Anweisung zu verwenden.
Test mit der Boolean-Wrapper-Klasse
Im vorherigen Schritt haben wir mit dem primitiven boolean-Typ gearbeitet. Java verfügt auch über eine entsprechende Wrapper-Klasse namens Boolean. Wrapper-Klassen bieten eine Möglichkeit, primitive Datentypen als Objekte zu verwenden. Dies ist besonders nützlich, wenn Sie mit Sammlungen (Collections) arbeiten oder wenn Sie einen booleschen Wert darstellen müssen, der möglicherweise null sein kann.
Die Boolean-Klasse verfügt über zwei vordefinierte Objekte für die booleschen Werte: Boolean.TRUE und Boolean.FALSE. Dies sind konstante Objekte, die die booleschen Werte true und false darstellen.
Wenn Sie mit Boolean-Objekten arbeiten, können Sie immer noch den Gleichheitsoperator == verwenden, um sie zu vergleichen. Es ist jedoch wichtig zu verstehen, wie == mit Objekten funktioniert. Bei Objekten prüft ==, ob die beiden Variablen auf dasselbe exakte Objekt im Speicher verweisen, nicht nur, ob sie denselben Wert haben.
Ändern wir unser Programm, um die Boolean-Wrapper-Klasse zu verwenden und zu sehen, wie sich der Gleichheitsoperator verhält.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor.Ersetzen Sie den Code durch folgenden:
public class HelloJava { public static void main(String[] args) { Boolean isJavaFunObject = Boolean.TRUE; if (isJavaFunObject == Boolean.TRUE) { System.out.println("Java is fun (using Boolean.TRUE)!"); } else { System.out.println("Java is not fun (using Boolean.TRUE)."); } Boolean anotherBooleanObject = true; // Autoboxing if (anotherBooleanObject == Boolean.TRUE) { System.out.println("Another boolean object is true!"); } else { System.out.println("Another boolean object is not true."); } } }Schauen wir uns die Änderungen an:
Boolean isJavaFunObject = Boolean.TRUE;: Wir deklarieren eine Variable vom TypBooleanund weisen ihr die KonstanteBoolean.TRUEzu.if (isJavaFunObject == Boolean.TRUE): Wir verwenden den Gleichheitsoperator==, um unserBoolean-Objekt mit der KonstanteBoolean.TRUEzu vergleichen. DaisJavaFunObjectBoolean.TRUEzugewiesen ist, verweisen sie auf dasselbe Objekt, daher wird diese Bedingungtruesein.Boolean anotherBooleanObject = true;: Diese Zeile demonstriert "Autoboxing". Java konvertiert automatisch den primitivenboolean-Werttruein einBoolean-Objekt.if (anotherBooleanObject == Boolean.TRUE): Wir verwenden erneut==, umanotherBooleanObjectmitBoolean.TRUEzu vergleichen. Aufgrund der Funktionsweise des Autoboxing und der Zwischenspeicherung (Caching) vonBoolean-Werten in Java verweisen die automatisch verpacktenBoolean-Objekte für die Wertetrueundfalseoft auf dieselben zwischengespeicherten Instanzen wieBoolean.TRUEundBoolean.FALSE. Daher wird diese Bedingung ebenfalls wahrscheinlichtruesein.
Speichern Sie die Datei.
Kompilieren Sie das Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaSie sollten die folgende Ausgabe sehen:
Java is fun (using Boolean.TRUE)! Another boolean object is true!Dies bestätigt, dass die Verwendung von
==mitBoolean.TRUEin diesen Fällen wie erwartet funktioniert, da die Variablen wahrscheinlich auf dasselbe zugrunde liegendeBoolean.TRUE-Objekt verweisen.
Allerdings kann das Verlassen auf == für den Vergleich von Boolean-Objekten in komplexeren Szenarien riskant sein, insbesondere wenn die Boolean-Objekte auf verschiedene Weise erstellt wurden oder aus verschiedenen Quellen stammen. Ein sichererer und empfohlener Weg, um Boolean-Objekte auf Wertgleichheit zu vergleichen, ist die Verwendung der .equals()-Methode.
Ändern wir den Code, um .equals() zu verwenden.
Öffnen Sie
HelloJava.javaim Editor.Ändern Sie die
if-Anweisungen, um.equals()zu verwenden:public class HelloJava { public static void main(String[] args) { Boolean isJavaFunObject = Boolean.TRUE; if (isJavaFunObject.equals(Boolean.TRUE)) { System.out.println("Java is fun (using equals)!"); } else { System.out.println("Java is not fun (using equals)."); } Boolean anotherBooleanObject = true; // Autoboxing if (anotherBooleanObject.equals(Boolean.TRUE)) { System.out.println("Another boolean object is true (using equals)!"); } else { System.out.println("Another boolean object is not true (using equals)."); } } }Wir haben
== Boolean.TRUEdurch.equals(Boolean.TRUE)ersetzt. Die.equals()-Methode vergleicht den Wert der Objekte, nicht ihre Speicheradresse.Speichern Sie die Datei.
Kompilieren Sie das Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaSie sollten die folgende Ausgabe sehen:
Java is fun (using equals)! Another boolean object is true (using equals)!Die Verwendung von
.equals()ist der Standard und der sicherste Weg, umBoolean-Objekte auf Wertgleichheit zu vergleichen.
Zusammenfassend lässt sich sagen, dass == zwar aufgrund der Zwischenspeicherung (Caching) für den Vergleich von Boolean-Objekten mit Boolean.TRUE funktionieren kann, aber die .equals()-Methode die bevorzugte und zuverlässigere Möglichkeit ist, um zu prüfen, ob ein Boolean-Objekt den Wert true repräsentiert.
Null-Werte bei Boolean-Variablen behandeln
Im vorherigen Schritt haben wir uns mit der Boolean-Wrapper-Klasse beschäftigt. Ein wesentlicher Unterschied zwischen dem primitiven boolean und der Boolean-Wrapper-Klasse besteht darin, dass eine Boolean-Variable den Wert null annehmen kann, während ein primitives boolean dies nicht kann. Der Umgang mit null-Werten ist in Java von entscheidender Bedeutung, um NullPointerException-Fehler zu vermeiden.
Eine NullPointerException tritt auf, wenn Sie versuchen, eine Variable zu verwenden, die derzeit auf null zeigt, als ob es sich um ein gültiges Objekt handelte. Beispielsweise führt das Aufrufen einer Methode auf einem null-Objekt zu einer NullPointerException.
Wenn Sie prüfen möchten, ob ein Boolean-Objekt true ist, müssen Sie vorsichtig sein, wenn das Objekt möglicherweise null ist.
Schauen wir uns an, was passiert, wenn wir versuchen, ein null-Boolean mit den bisher gelernten Methoden zu prüfen.
Öffnen Sie die Datei
HelloJava.javaim WebIDE-Editor.Ersetzen Sie den Code durch folgenden:
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; // Attempting to use == with null if (nullableBoolean == true) { System.out.println("This won't be printed."); } else { System.out.println("Using == with null Boolean."); } // Attempting to use .equals() with null // This will cause a NullPointerException! // if (nullableBoolean.equals(Boolean.TRUE)) { // System.out.println("This will not be reached."); // } else { // System.out.println("This will not be reached either."); // } } }In diesem Code:
Boolean nullableBoolean = null;: Wir deklarieren eineBoolean-Variable und setzen sie explizit aufnull.if (nullableBoolean == true): Wir verwenden den Gleichheitsoperator==, um dasnull-Booleanmit dem primitiventruezu vergleichen. Beim Vergleich einesBoolean-Objekts (auch wenn esnullist) mit einem primitivenbooleanführt Java ein "Unboxing" durch. Es versucht, dasBoolean-Objekt in ein primitivesbooleanumzuwandeln. Wenn dasBoolean-Objektnullist, führt dieser Unboxing-Prozess zu einerNullPointerException.- Die auskommentierte
.equals()-Prüfung würde ebenfalls eineNullPointerExceptionverursachen, da Sie versuchen, die.equals()-Methode auf einemnull-Objekt (nullableBoolean) aufzurufen.
Speichern Sie die Datei.
Kompilieren Sie das Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaSie werden in der Konsole eine Fehlermeldung sehen, die auf eine
NullPointerExceptionhinweist:Exception in thread "main" java.lang.NullPointerException at HelloJava.main(HelloJava.java:6)Dies zeigt, dass das direkte Vergleichen eines möglicherweise
null-WertsBooleanmit einem primitivenbooleanmithilfe von==oder das Aufrufen von.equals()darauf zu einerNullPointerExceptionführen kann.
Um möglicherweise null-Werte Boolean-Objekte sicher zu behandeln, sollten Sie immer prüfen, ob das Objekt null ist, bevor Sie es entpacken oder Methoden darauf aufrufen.
So können Sie sicher prüfen, ob ein Boolean-Objekt true ist:
Öffnen Sie
HelloJava.javaim Editor.Ersetzen Sie den Code durch folgenden:
public class HelloJava { public static void main(String[] args) { Boolean nullableBoolean = null; Boolean trueBoolean = Boolean.TRUE; Boolean falseBoolean = Boolean.FALSE; // Safely check if nullableBoolean is true if (nullableBoolean != null && nullableBoolean == true) { System.out.println("nullableBoolean is true (safe check)."); } else { System.out.println("nullableBoolean is not true or is null (safe check)."); } // Safely check if trueBoolean is true if (trueBoolean != null && trueBoolean == true) { System.out.println("trueBoolean is true (safe check)."); } else { System.out.println("trueBoolean is not true or is null (safe check)."); } // Safely check if falseBoolean is true if (falseBoolean != null && falseBoolean == true) { System.out.println("falseBoolean is true (safe check)."); } else { System.out.println("falseBoolean is not true or is null (safe check)."); } // Alternative safe check using equals if (Boolean.TRUE.equals(nullableBoolean)) { System.out.println("nullableBoolean is true (safe equals check)."); } else { System.out.println("nullableBoolean is not true or is null (safe equals check)."); } if (Boolean.TRUE.equals(trueBoolean)) { System.out.println("trueBoolean is true (safe equals check)."); } else { System.out.println("trueBoolean is not true or is null (safe equals check)."); } } }In diesem aktualisierten Code:
if (nullableBoolean != null && nullableBoolean == true): Wir prüfen zunächst, obnullableBooleannichtnullist, indem wirnullableBoolean != nullverwenden. Der&&-Operator bedeutet, dass der zweite Teil der Bedingung (nullableBoolean == true) nur ausgewertet wird, wenn der erste Teil (nullableBoolean != null)trueist. Dies verhindert dieNullPointerException. WennnullableBooleannullist, ist der erste Teilfalse, und die gesamte Bedingung istfalse, ohne dass der zweite Teil ausgewertet wird.if (Boolean.TRUE.equals(nullableBoolean)): Dies ist eine weitere sichere Möglichkeit, zu prüfen, ob einBoolean-Objekttrueist, auch wenn esnullist. Indem wir die.equals()-Methode auf dem bekannten nicht-null-ObjektBoolean.TRUEaufrufen und das möglicherweisenull-ObjektnullableBooleanals Argument übergeben, vermeiden wir dieNullPointerException. Die.equals()-Methode ist so konzipiert, dass sienull-Argumente gracefully behandelt;Boolean.TRUE.equals(null)gibt einfachfalsezurück.
Speichern Sie die Datei.
Kompilieren Sie das Programm:
javac HelloJava.javaFühren Sie das Programm aus:
java HelloJavaSie sollten die folgende Ausgabe sehen:
nullableBoolean is not true or is null (safe check). trueBoolean is true (safe check). falseBoolean is not true or is null (safe check). nullableBoolean is not true or is null (safe equals check). trueBoolean is true (safe equals check).Dies zeigt, wie Sie den Wert eines
Boolean-Objekts sicher prüfen können, auch wenn es möglicherweisenullist, indem Sie sowohl die!= null-Prüfung in Kombination mit== trueals auch dieBoolean.TRUE.equals()-Methode verwenden.
Denken Sie immer daran, die Möglichkeit von null zu berücksichtigen, wenn Sie mit Boolean-Objekten arbeiten, um Laufzeitfehler zu vermeiden.
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in Java prüft, ob eine boolesche Variable true ist. Wir haben begonnen, indem wir den Gleichheitsoperator == verwendet haben, um eine boolesche Variable direkt mit dem booleschen Literal true zu vergleichen. Dies ist die häufigste und einfachste Methode, um den Wert eines primitiven booleschen Datentyps zu prüfen.
Wir haben auch untersucht, wie man Boolean-Wrapper-Objekte behandelt, die null sein können. Wir haben gelernt, dass das direkte Vergleichen eines Boolean-Objekts mit true mithilfe von == möglicherweise nicht wie erwartet funktioniert, da es sich um die Identität von Objekten handelt. Stattdessen sollten wir die equals()-Methode verwenden oder das Boolean-Objekt in seinen primitiven booleschen Wert entpacken, bevor wir es vergleichen. Schließlich haben wir die Wichtigkeit des Umgangs mit potenziellen NullPointerException beim Arbeiten mit nullable Boolean-Objekten betont, indem wir auf null prüfen, bevor wir versuchen, ihren Wert zuzugreifen.



