Java conditional operator ?: result type
- by Wangnick
I'm a bit puzzled about the conditional operator. Consider the following two lines:
Float f1 = false? 1.0f: null;
Float f2 = false? 1.0f: false? 1.0f: null;
Why does f1 become null and the second statement throws a NullPointerException?
Langspec-3.0 para 15.25 sais:
Otherwise, the second and third operands are of types S1 and S2 respectively.
Let T1 be the type that results from applying boxing conversion to S1, and let
T2 be the type that results from applying boxing conversion to S2. The type of
the conditional expression is the result of applying capture conversion
(§5.1.10) to lub(T1, T2) (§15.12.2.7).
So for false?1.0f:null T1 is Float and T2 is the null type. But what is the result of lub(T1,T2)? This para 15.12.2.7 is just a bit too much ...
BTW, I'm using 1.6.0_18 on Windows.
PS: I know that Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; doesn't throw NPE.