Frage

In Java, würden Sie in der Regel sagen, dass

if(someBool != false)

ist die gleiche wie

if(someBool)

Was aber, wenn someBool ist nicht vom Typ boolean aber Boolean, und sein Wert ist null?

War es hilfreich?

Lösung

Es wird eine NullPointerException werfen ( autounboxing von null wirft NPE).

Aber das einzige Mittel, dass Sie keine null Wert zulassen. Entweder eine Standard verwenden, oder verwenden Sie kein autounboxing und einen Nicht-Null-Check machen. einen null Wert einer Booleschen Mittel Weil verwenden Sie 3 haben, nicht mehr als 2 Werte. (Bessere Wege im Umgang mit ihm von Michael und Tobiask vorgeschlagen wurde)

Andere Tipps

Wenn Sie Boolean Instanzen sowie Primitiven zu handhaben wollen und sein Null sicher, können Sie diese verwenden:

if(Boolean.TRUE.equals(someBool))

Verwenden Sie Apache Commons BooleanUtils.isTrue () oder .isFalse ()

Wenn someBool ist Boolean

if (someBull != null && someBull) {
  //Yeah, true.
}

Da Boolean null make sein kann sicher vermeiden Sie NullPointerException von für nicht null zu überprüfen.

Ich habe einen kleinen Test:

    Boolean o = null;
    try {
        System.out.println(o ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        System.out.println((o != false) ? "yes" : "no");
    } catch (Exception e) {
        e.printStackTrace();
    }

Der Ausgang ist überraschend:

java.lang.NullPointerException
    at btest.main(btest.java:10)
java.lang.NullPointerException
    at btest.main(btest.java:15)

Der erste NPE ist zu erwarten, weil o autounboxed wird (und das nicht, weil es null). Der zweite Fall aus dem gleichen Grund, aber es nicht natürlich anfühlen. Auf jeden Fall ist die Lösung zu tun:

System.out.println(!Boolean.FALSE.equals(o) ? "yes" : "no");

Sie können jedoch ein Null Boolean mit einer Boolean-Instanz vergleichen. Zum Beispiel:

Boolean myBool = null;
System.out.println(myBool == Boolean.FALSE);
System.out.println(myBool == Boolean.TRUE);

druckt:

false
false

Gute Darstellungen der Differenz zwischen dem primitiven boolean & das Objekt Boolean . Ersteres kann nur true oder false sein. Letzteres kann sein true , false oder unbekannt / undefined . (D.h. null). Welche Sie verwenden, hängt davon ab, ob Sie mit zwei Anwendungsfällen oder drei behandeln.

Es ist alt, aber Boolean.valueOf(null) ist false, wie Boolean.valueOf(false) false ist.

Tatsächlich ist die Boolesche Konstruktor akzeptiert null, false zurückgibt und wirft keine NullPointerTantrum.

 new Boolean(null);
 <false>

Dies hat den zusätzlichen Bonus auch eine thruthy Antwort auf die Zeichenfolge "true" geben, die nicht der Fall für Boolean.TRUE.equals ist, aber wir werden wieder mehr eingeschränkt, die nur Konstrukteure für Streicher und Boolesche Werte.

Etwas, das Sie mit String-Verkettung überwinden können, die auch null sicher ist.

 new Boolean(""+null);
 <false>

 new Boolean(""+false);
 <false>

 new Boolean(""+new Object());
 <false>

 new Boolean(""+6);
 <false>

 new Boolean(""+new Integer(9));
 <false>

Um sicherzustellen, dass alle wahren Optionen, verfügbar in Java, noch bleiben.

 new Boolean(""+true);
 <true>

 new Boolean(""+"true");
 <true>

Wenn es Java 7+ können Sie

import java.util.Objects;

Und

if (Objects.equals(someBool, true))

As Boolean geben Sie ein Objekt, Sie immer auf NULL überprüfen müssen, bevor auf das Objekt

Arbeits

Wenn seine Null dann werden Sie eine Nullpointer bekommen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top