Java 三元(即时 if)评估
2022-09-01 07:11:17
我找不到规范的相关部分来回答这个问题。在 Java 的条件运算符语句中,是否同时计算了 true 和 false 参数?
因此,以下情况可能会引发 NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
我找不到规范的相关部分来回答这个问题。在 Java 的条件运算符语句中,是否同时计算了 true 和 false 参数?
因此,以下情况可能会引发 NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
我知道这是旧帖子,但看看非常相似的案例,然后投票给我:P
回答原始问题:只评估一个操作数,但是:
@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
此测试将始终抛出,在这种情况下,IF statemat 不等效于 ?: 运算符。NullPointerException
原因就在 http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25。关于装箱/拆箱的部分被卷入其中,但看一看就很容易理解:
“如果第二和第三个操作数中的一个是类型,而另一个操作数的类型是类型,则条件表达式的类型是 。”
boolean
Boolean
boolean
这同样适用于Integer.intValue()
此致敬意!