奇怪的Java行为。三元运算符
为什么这个代码可以工作
Float testFloat = null;
Float f = true ? null : 0f;
为什么这会引发异常
Float testFloat = null;
Float f = true ? testFloat : 0f;
但最奇怪的是,这段代码也成功运行,没有任何异常:
Float testFloat = null;
Float f = testFloat;
Java的三元运算符似乎改变了行为。有人能解释一下为什么会这样吗
# 1 楼答案
行为在JLS - Conditional Operator中指定:
我的。因此,在2nd情况下:
由于第三个操作数是基元类型(
T
),因此表达式的类型将是浮点类型-T
。因此,取消绑定testFloat(当前是null
引用)到float
将导致NPE对于1st案例,相关部分为最后一部分:
那么根据这个,
然后条件表达式的类型变为-
Float
。不需要对null
进行拆箱,因此不需要NPE