質問

Javaでは、定義です(ただ、たまにい

if(someBool != false)

と同じ

if(someBool)

その場合 someBool いのタイプ booleanBoolean, ており,その値は null?

役に立ちましたか?

解決

それはaを投げます NullPointerException (オートボクシングnull NPEをスロー)。

しかし、それはあなたが許可してはならないことを意味します null 価値。デフォルトを使用するか、自動発信ボクシングを使用して、非nullチェックを行わないでください。使用しているから null ブール値の値は、2つの値ではなく3つの値があることを意味します。 (それを処理するより良い方法は、マイケルとトビアスクによって提案されました)

他のヒント

処理したい場合 Boolean インスタンスだけでなく、プリミティブであり、null-safeである場合は、これを使用できます。

if(Boolean.TRUE.equals(someBool))

apachecommons booleanutils.istrue()または.ispalse()を使用します

もしも someBoolBoolean

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

Booleanはそうなる可能性があるので null 避けてください NullPointerException Not Nullを確認します。

私は少しテストしました:

    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();
    }

出力は驚くべきことです:

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

oは自動発信されるため、最初のNPEが予想される必要があります(そして、それはnullであるために失敗します)。 2番目は同じ理由で起こりますが、自然に感じません。とにかく、解決策はすることです:

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

ができます。比較nullのBooleanとのBooleanインスタンス.例えば:

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

版画

false
false

原始の違いの良いイラスト ブール & オブジェクト ブール. 。前者はただのことです 本当です また . 。後者はそうすることができます 本当です, , 、 また 不明/未定義. 。 (つまり、null)。使用するものは、2つのユースケースまたは3つのユースケースに対処するかどうかによって異なります。

それは古いですが、 Boolean.valueOf(null)false, 、 と同じように Boolean.valueOf(false)false.

実際、ブールのコンストラクターはnullを受け入れ、falseを返し、nullpointertantrumを投げません。

 new Boolean(null);
 <false>

これには、文字列に辛い応答も与えられるという追加のボーナスがあります "true" そうではありません Boolean.TRUE.equals しかし、私たちは再びより制限されており、弦とブーチとのためのコンストラクターのみを持っています。

文字列の連結で克服できるもの。これもヌルプルーフです。

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

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

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

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

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

Javaで利用可能なすべての真のオプションがまだ残っていることを確認してください。

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

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

Java 7+の場合、使用できます

import java.util.Objects;

if (Objects.equals(someBool, true))

Booleanがオブジェクトを提供するので、オブジェクトで作業する前に常にnullをチェックする必要があります

そのヌルの場合、nullpointerexceptionを取得します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top