Java三元(即时)评估

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

因此,以下内容可能会抛出NullPointerException

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

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

未针对条件表达式的特定评估评估未选择的操作数表达式。

不,它不能。 这与以下相同:

 Integer test = null; if ( test != null ) { test = test.intValue(); } else { test = 0; } 

我知道这是老post,但看看非常相似的情况,然后投票给我: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()

最好的祝福!

语法错了。

整数测试=(测试!= null)? test.intValue():0;

希望能帮助到你 ….