Java 三元(即时 if)评估

我找不到规范的相关部分来回答这个问题。在 Java 的条件运算符语句中,是否同时计算了 true 和 false 参数?

因此,以下情况可能会引发 NullPointerException

Integer test = null;

test != null ? test.intValue() : 0;

答案 1

既然你想要规范,这里是(来自§15.25条件运算符?:,本节的最后一句):

未选择的操作数表达式不会针对条件表达式的特定计算进行计算。


答案 2

我知道这是旧帖子,但看看非常相似的案例,然后投票给我: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。关于装箱/拆箱的部分被卷入其中,但看一看就很容易理解:

“如果第二和第三个操作数中的一个是类型,而另一个操作数的类型是类型,则条件表达式的类型是 。”booleanBooleanboolean

这同样适用于Integer.intValue()

此致敬意!


推荐