質問
Javaでは、定義です(ただ、たまにい
if(someBool != false)
と同じ
if(someBool)
その場合 someBool
いのタイプ boolean
が Boolean
, ており,その値は null
?
解決
それはaを投げます NullPointerException
(オートボクシング の null
NPEをスロー)。
しかし、それはあなたが許可してはならないことを意味します null
価値。デフォルトを使用するか、自動発信ボクシングを使用して、非nullチェックを行わないでください。使用しているから null
ブール値の値は、2つの値ではなく3つの値があることを意味します。 (それを処理するより良い方法は、マイケルとトビアスクによって提案されました)
他のヒント
処理したい場合 Boolean
インスタンスだけでなく、プリミティブであり、null-safeである場合は、これを使用できます。
if(Boolean.TRUE.equals(someBool))
apachecommons booleanutils.istrue()または.ispalse()を使用します
もしも someBool
は Boolean
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を取得します