我找不到规范的相关部分来回答这个问题。在 Java 的条件运算符语句中,是否同时评估了真假参数?
那么以下是否会引发 NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
我找不到规范的相关部分来回答这个问题。在 Java 的条件运算符语句中,是否同时评估了真假参数?
那么以下是否会引发 NullPointerException
Integer test = null;
test != null ? test.intValue() : 0;
由于您想要规范,因此它是(来自§15.25 条件运算符 ? :,该部分的最后一句):
未选择的操作数表达式不会针对条件表达式的特定评估进行评估。
我知道这是旧帖子,但看看非常相似的案例然后投票给我:P
回答原始问题:只评估一个操作数但:
@Test
public void test()
{
Integer A = null;
Integer B = null;
Integer chosenInteger = A != null ? A.intValue() : B;
}
此测试将NullPointerException
始终抛出,在这种情况下 IF statemat 不等于 ?: 运算符。
原因在这里http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.25。关于装箱/拆箱的部分被卷入其中,但看一看就很容易理解:
“如果第二个和第三个操作数之一是
boolean
类型,另一个是类型Boolean
,那么条件表达式的类型是boolean
。”
这同样适用于Integer.intValue()
最好的祝福!
不,它不能。这与以下内容相同:
Integer test = null;
if ( test != null ) {
test = test.intValue();
}
else {
test = 0;
}