Ich habe folgenden Code:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
Warum führt meine Überprüfung der Booleschen Variablen "bool" zu einer Ausnahme? Sollte es nicht einfach direkt an der if-Anweisung vorbei springen, wenn es "sieht", dass es nicht wahr ist? Wenn ich die if-Anweisung entferne oder überprüfe, ob sie NICHT null ist, verschwindet die Ausnahme.
if (bool == Boolean.TRUE)
false ausgewertet, ohne eine Ausnahme zu generieren. Ich bin mir nicht sicher, ob dies in dem Fall beabsichtigt war, den ich gerade gefunden habe.bool
seinnull
ODER wennBoolean
wurde explizit (und nicht als Verweis auf gebautBoolean.TRUE
). Also nicht zu empfehlen; im Gegensatz dazuif (Boolean.TRUE.equals(bool))
würde wie erwartet funktionieren, einschließlich sicherer Umgang mitnull
Wert.Antworten:
Wenn Sie eine haben
boolean
, kann es entwedertrue
oder seinfalse
. Doch wenn Sie einBoolean
es kann entwederBoolean.TRUE
,Boolean.FALSE
odernull
wie jedes andere Objekt.In Ihrem speziellen Fall löst Ihr
Boolean
isnull
und dieif
Anweisung eine implizite Konvertierung aus, dieboolean
das erzeugtNullPointerException
. Möglicherweise benötigen Sie stattdessen:quelle
Boolean
kann a eine beliebige Anzahl von echten Instanzen sein, nicht nurBoolean.TRUE
. Zum Beispielnew Boolean(true)
.if (myBoolean)
(womyBoolean
istBoolean
) kein Compilerfehler oder zumindest eine Warnung ausgelöst wird. Dies ist sicher ein Gotcha.Wenn Sie keine zusätzlichen Nullprüfungen mögen:
quelle
Verwenden Sie die Apache BooleanUtils .
(Wenn Spitzenleistung die wichtigste Priorität in Ihrem Projekt ist, schauen Sie sich eine der anderen Antworten für eine native Lösung an, für die keine externe Bibliothek erforderlich ist.)
Das Rad nicht neu erfinden. Nutzen Sie das, was bereits gebaut wurde, und nutzen Sie
isTrue()
:Überprüft, ob ein
Boolean
Wert wahr ist, und verarbeitet ihnnull
durch Rückgabefalse
.Wenn Sie nicht auf die Bibliotheken beschränkt sind, die Sie "einschließen" dürfen, gibt es eine Reihe großartiger Hilfsfunktionen für alle Arten von Anwendungsfällen, einschließlich
Booleans
undStrings
. Ich schlage vor, Sie lesen die verschiedenen Apache-Bibliotheken durch und sehen, was sie bereits bieten.quelle
toStringYesNo
diese Bibliothek auch in allen meinen Anwendungen.Boolean
Typen können seinnull
. Sie müssen einenull
Überprüfung durchführen, wie Sie sie eingestellt habennull
.quelle
Oder mit der Leistung von Java 8 Optional können Sie auch einen solchen Trick ausführen:
:) :)
quelle
Boolean ist die Objekt-Wrapper-Klasse für den primitiven Boolean. Diese Klasse kann wie jede Klasse tatsächlich null sein. Aus Leistungs- und Speichergründen ist es immer am besten, das Grundelement zu verwenden.
Die Wrapper-Klassen in der Java-API dienen hauptsächlich zwei Zwecken:
http://en.wikipedia.org/wiki/Primitive_wrapper_class
quelle
Da Ihre Variable bool auf eine Null zeigt, erhalten Sie immer eine NullPointerException. Sie müssen die Variable zuerst irgendwo mit einem Wert ungleich Null initialisieren und dann ändern.
quelle
catch
Block die NullPointerException behandeln. Das Problem hierbei ist, dass das OP versucht, eine Nullreferenz in ein Grundelement zu entpacken.null
und dem anschließenden Testen nichts bewirkt . Vermutlich wäre echter Code nicht so einfach oder der gesamteif
Test könnte entfernt werden.