可以說我有這樣的:如何JAVA處理內單個多個條件IF語句
if(bool1 && bool2 && bool3) {
...
}
現在。如果bool1被評估爲false,Java是否足夠聰明以跳過檢查bool2和bool2? java甚至從左到右檢查它們嗎? 我在問這個問題,因爲我正在「分類」我的if內部的條件,直到它們完成所需的時間(從左邊最便宜的那個開始)。現在我不確定這是否會給我帶來任何性能好處,因爲我不知道Java如何處理這個問題。
可以說我有這樣的:如何JAVA處理內單個多個條件IF語句
if(bool1 && bool2 && bool3) {
...
}
現在。如果bool1被評估爲false,Java是否足夠聰明以跳過檢查bool2和bool2? java甚至從左到右檢查它們嗎? 我在問這個問題,因爲我正在「分類」我的if內部的條件,直到它們完成所需的時間(從左邊最便宜的那個開始)。現在我不確定這是否會給我帶來任何性能好處,因爲我不知道Java如何處理這個問題。
是,爪哇(類似於其他主流語言)使用
懶評價
短路,這意味着它少計算越好。
這意味着下面的代碼是完全安全的:
if(p != null && p.getAge() > 10)
此外,a || b
從不計算b
如果a
計算結果爲true
。
抱歉挖掘舊線程,但爲什麼你有「&&和」?你的意思是「&&」? – 2014-08-26 17:40:14
是的,這就是所謂的短路。
請看看這個維基百科頁面上short-circuiting
如果bool1被評估爲false,Java是否足夠智能地跳過檢查bool2和bool2?
它不是一個聰明的事情,它是一個在語言中指定的要求。否則,你不能寫表達式。
if(s != null && s.length() > 0)
或
if(s == null || s.length() == 0)
順便說一句,如果你使用&
和|
它將始終計算表達式的兩側。
請look up在Java中(同樣適用於|
和||
)&
和&&
之間的差異。
&
和|
是只是邏輯運算符,而&&
和||
是條件邏輯運算符,它在你的例子意味着
if(bool1 && bool2 && bool3) {
將跳過bool2
和bool3
如果bool1
是假的,
if(bool1 & bool2 & bool3) {
將評估所有條件,而不考慮其值。
例如,給定:
boolean foo() {
System.out.println("foo");
return true;
}
if(foo() | foo())
將打印foo
兩次,並if(foo() || foo())
- 只是一次。
由於您試圖通過這些更改來提高性能,您是否嘗試過在移動條件之前和之後測量性能?一方面,它應該告訴你,這個邏輯是否真的被短路,如下所述,另一方面,它會告訴你這些變化的幅度是否在更大的情況下是顯着的。 – Douglas 2011-12-20 09:31:16