これに答える仕様の関連部分が見つかりません。 Javaの条件付き演算子ステートメントでは、真と偽の両方の引数が評価されますか?
したがって、次のようにNullPointerExceptionがスローされる可能性があります
Integer test = null;
test != null ? test.intValue() : 0;
仕様が必要だったので、ここにあります( §15.25条件演算子?: 、セクションの最後の文から):
選択されていないオペランド式は、条件式の特定の評価では評価されません。
私はそれが古い投稿であることを知っていますが、非常によく似たケースを見て、私に投票してください:P
元の質問への回答:1つのオペランドのみが評価されますが:
_@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
_
このテストは常にNullPointerException
をスローします。この場合、IF statematは?:演算子と同等ではありません。
理由はここにあります http://docs.Oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25 。開封/開封に関する部分は巻き込まれていますが、以下を見ると簡単に理解できます。
「2番目と3番目のオペランドの一方が
boolean
型で、もう一方の型がBoolean
型の場合、条件式の型はboolean
です。」
同じことがInteger.intValue()
にも当てはまります
宜しくお願いします!
いいえ、できませんでした。それは次と同じです:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}