これに答える仕様の関連部分が見つかりません。Java の条件演算子ステートメントでは、true と false の両方の引数が評価されますか?
したがって、次は NullPointerException をスローできますか
Integer test = null;
test != null ? test.intValue() : 0;
これに答える仕様の関連部分が見つかりません。Java の条件演算子ステートメントでは、true と false の両方の引数が評価されますか?
したがって、次は NullPointerException をスローできますか
Integer test = null;
test != null ? test.intValue() : 0;
あなたは仕様が欲しかったので、ここにあります(§15.25 Conditional Operator ? :、セクションの最後の文から):
選択されていないオペランド式は、条件式の特定の評価では評価されません。
私はそれが古い投稿であることを知っていますが、非常によく似たケースを見て、私に投票してください: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番目のオペランドの1つが
boolean
型で、もう1つの型Boolean
が型である場合、条件式の型はですboolean
。」
同じことが当てはまりますInteger.intValue()
よろしくお願いします!
いいえ、できませんでした。それは次と同じです:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}