動作はJLS - Conditional Operatorで指定されています:
2 番目と 3 番目のオペランドの一方がプリミティブ型 T で、もう一方の型が T にボックス化変換 (§5.1.7) を適用した結果である場合、条件式の型は Tです。
鉱山を強調します。したがって、2番目のケースでは:
Float f = true ? testFloat : 0f;
第 3 オペランドはプリミティブ型( T
) であるため、式の型は float 型 - になりT
ます。そのため、現在参照されているtestFloatをボックス 化解除すると、 NPEが発生します。null
float
最初のケースに関しては、関連する部分は最後のものです:
それ以外の場合、2 番目と 3 番目のオペランドの型はそれぞれ S1 と S2 です。T1 を S1 にボックス化変換を適用した結果の型とし、T2 を S2 にボックス化変換を適用した結果の型とする。条件式の型は、キャプチャ変換 (§5.1.10) を lub(T1, T2) (§15.12.2.7) に適用した結果です。
したがって、これによると:
null type - S1
float - S2
null type - T1 (boxing null type gives null type)
Float - T2 (float boxed to Float)
そして、条件式の型は - になりFloat
ます。のボックス化解除はnull
必要ないため、NPE
.