The value for key "B" is null. But the return type of your conditional expression is float (primitive) because you use the literal 0F , not float (wrapper), so the value should be autounboxed (for the primitive) and then autoboxed (back to the object). This leads to NPE.
Compare with what happens when using
Float foo = (tm == null ? Float.valueOf(0f) : tm.get(key));
As an additional explanation, here is what your conditional does (showing explicit boxing):
Float foo; float conditionalResult; if ( tm == null ) { conditionalResult = 0F; } else { conditionalResult = tm.get(key).floatValue();
JLS 15.25 determines what the return type of the conditional statement will be. This is quite complicated, and itβs easier for me to learn from experiments :-).
source share