[英]Java ternary (immediate if) evaluation
我无法找到规范的相关部分来回答这个问题。 在Java中的条件运算符语句中,是否评估了true和false参数?
因此,以下内容可能会抛出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不等同于?:operator。
原因在于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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.