Java三元(即时if)评估
我找不到规范的相关部分来回答这个问题。 在Java中的条件运算符语句中,是否同时计算true和false参数 那么下面的代码是否会抛出NullPointerException呢Java三元(即时if)评估,java,conditional-operator,short-circuiting,Java,Conditional Operator,Short Circuiting,我找不到规范的相关部分来回答这个问题。 在Java中的条件运算符语句中,是否同时计算true和false参数 那么下面的代码是否会抛出NullPointerException呢 Integer test = null; test != null ? test.intValue() : 0; 不,不可能。这与: Integer test = null; if ( test != null ) { test = test.intValue(); } else { test =
Integer test = null;
test != null ? test.intValue() : 0;
不,不可能。这与:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}
既然您想要这个规范,这里就是(来自,本节的最后一句话): 未选择的操作数表达式不会针对条件表达式的特定计算进行计算
我知道这是一篇老文章,但看看非常相似的案例,然后给我投票:p 回答原始问题:只计算一个操作数,但:
@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
如果statemat不等于?:运算符,此测试将始终抛出NullPointerException
原因就在这里。有关装箱/拆箱的部分涉及其中,但很容易理解:
如果第二个和第三个操作数中的一个为布尔型
,另一个为布尔型
,则条件表达式的类型为布尔型
这同样适用于Integer.intValue()
致以最良好的祝愿 它也非常简单,您可以尝试一下,看看会发生什么:)它提供了一个特定实例的信息。最好能找到标准上说的。有趣的一点,谢谢Michal。由于A.intValue()的类型为int,因此对B的引用必须自动取消绑定。但是它是空的,所以它抛出NPE。在启用空分析的Java8/EclipseLuna中,此测试甚至不编译!