2012-08-27 28 views
0

可能重複:
&& (AND) and || (OR) in Java IF statements當使用OR運算符時它運行兩個參數嗎?

if(foo || bar) { 

} 

是真實的,它甚至進入酒吧

+2

如果'foo'爲true,'bar'將被忽略。這是短路評估。 – Baz

+1

這樣的問題沒有什麼意義。爲什麼不只是[嘗試](http://ideone.com/m35Sl)? –

+0

@Karolis:因爲嘗試會向您顯示您現在運行的Java VM的行爲,而不一定是指定的行爲。 – jarnbjo

回答

7

沒有,||採用的是所謂short-circuit evaluation,否則稱爲最小評估,並將停止儘快評估條件,因爲它認爲它的值應該true(從左至右)的表達式。

JLS

15.24。條件或運算符||

條件或運算符||運算符就像| (第15.22.2節),但 只有在其左手 操作數的值爲false時纔會評估其右側操作數。

&&採用了類似的方法:

15.23。條件與運算& &

的條件和操作& &就像&(§15.22.2),但評估 其右邊的操作數只有在其左側操作數的值是 真。

1

||&&都是短路邏輯運算符。

當兩個表達式連接OR(||)時,如果第一個表達式爲真,答案將始終爲真。

||  true  false 
true true  true 
false true  false 
1

&&||只要其結果被稱爲停止評價。因此,例如:

if (a == null || a.get() == null) 

作品很好,因爲如果是零,第二部分沒有評估,你不要冒險一個NullPointerException。

如果你想兩個表達式進行評估,您可以使用無條件&|

if (a == null | a.get() == null) 

將評估這兩個條件,第一個是真還是假。

This thread舉例說明您可能希望發生這種情況的情況。

相關問題