2016-02-14 68 views
1

假設這樣的情況;空安全檢查,如果條件priorty

if(event.getAdapter() != null && event.getAdapter().getCount() > 0) 

在上面的代碼中,首先我檢查它是否爲空,然後檢查是否計數是否大於零。如果在第二個條件之前檢查第一個條件,那麼這個代碼將按預期工作。但是,如果(我聽說JVM有時便開始檢查最失敗條件,加快)秒條件比第一個選中,那麼這個代碼將會給運行時錯誤。

所以我的問題是,上面的是校驗碼安全嗎?它會按預期工作嗎?或者jvm有時可能從第二個條件開始?

回答

4

完全安全,第二個線程無法更改適配器。

的Java 8可能會產生一個Optional<Adapter>,並允許不同的配方。

2

上面的代碼是安全的。如果第一個是false,JVM會將第二個評估短路。

JLS-15.23. Conditional-And Operator &&說(部分)

的條件和運營商&&就像&§15.22.2),但評估其右邊的操作數只有在其左側操作數的值是true

0

當您使用& &時,所有條件將從左到右執行,直到您的條件之一被評估爲false。

例如:

A && B && C 

如果B爲假,C不會被評估。

但是如果你只使用一個&,所有的條件進行評估,即使一個是假的。作爲邏輯運算符,它是&和之間的主要區別。

我希望它能幫助你。