簡體   English   中英

Java三元(即時)評估

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM