可能重複:
&& (AND) and || (OR) in Java IF statements當使用OR運算符時它運行兩個參數嗎?
if(foo || bar) {
}
當富是真實的,它甚至進入酒吧?
可能重複:
&& (AND) and || (OR) in Java IF statements當使用OR運算符時它運行兩個參數嗎?
if(foo || bar) {
}
當富是真實的,它甚至進入酒吧?
沒有,||
採用的是所謂short-circuit evaluation,否則稱爲最小評估,並將停止儘快評估條件,因爲它認爲它的值應該true
(從左至右)的表達式。
從JLS:
15.24。條件或運算符||
條件或運算符||運算符就像| (第15.22.2節),但 只有在其左手 操作數的值爲false時纔會評估其右側操作數。
&&
採用了類似的方法:
15.23。條件與運算& &
的條件和操作& &就像&(§15.22.2),但評估 其右邊的操作數只有在其左側操作數的值是 真。
||
和&&
都是短路邏輯運算符。
當兩個表達式連接OR(||
)時,如果第一個表達式爲真,答案將始終爲真。
|| true false
true true true
false true false
&&
和||
只要其結果被稱爲停止評價。因此,例如:
if (a == null || a.get() == null)
作品很好,因爲如果是零,第二部分沒有評估,你不要冒險一個NullPointerException。
如果你想兩個表達式進行評估,您可以使用無條件&
或|
:
if (a == null | a.get() == null)
將評估這兩個條件,第一個是真還是假。
This thread舉例說明您可能希望發生這種情況的情況。
如果'foo'爲true,'bar'將被忽略。這是短路評估。 – Baz
這樣的問題沒有什麼意義。爲什麼不只是[嘗試](http://ideone.com/m35Sl)? –
@Karolis:因爲嘗試會向您顯示您現在運行的Java VM的行爲,而不一定是指定的行爲。 – jarnbjo