2011-05-04 39 views
0

從處理或優化的角度來看,哪2個更好?如果循環處理效率

我覺得選項1更具可讀性,但我被告知選項2更高效。是這樣嗎?

if (value != null) { 
    if (value.equalsIgnoreCase(ApplicationConstants.A)) { 
    } else if (value.equalsIgnoreCase(ApplicationConstants.B)) { 
    } 
} 

選項2:

if ((value != null) && (value.equalsIgnoreCase(ApplicationConstants.A))) { 

} else if ((value != null) && (value.equalsIgnoreCase(ApplicationConstants.B))) { 

} 
+4

沒有if循環... – 2011-05-04 05:16:08

回答

8

這裏沒有什麼可以關心性能的方式,寫下你的代碼,這樣它就像你可以做到的那樣可讀。

當性能測試稍後突出顯示需要優化的區域時,只優化需要它的位置。

爲了使其更具可讀性,你可以翻轉你的測試,以擺脫空檢查:

if (ApplicationConstants.A.equalsIgnoreCase(value)) { 
} else if (ApplicationConstants.B.equalsIgnoreCase(value)) { 
} 
+1

+1同意,這裏的區別是如此之小以至於無所謂幾乎100%的時間。優化可讀性。 – WhiteFang34 2011-05-04 05:22:29

+0

我甚至打賭,在熱點優化器運行後,可能根本沒有任何區別。 – Axel 2011-05-04 05:29:04

0

我期望第一要稍微更有效,因爲&&是短路,所以也無妨給多個條件分支。但是如果你想確定一下,那就定下來。

2

Option 1是有效的,因爲沒有多餘的null檢查。

+0

謝天謝地,ifnonnull得到了自己的JVM操作碼,所以比較便宜。 – 2011-05-04 05:19:04

0

我會像選項2一樣選擇1,不會進行比較。

+0

是的,正如托馬斯指出的那樣,沒有什麼叫做If循環,循環會用於,同時,爲每個和爲... – midhunhk 2011-05-04 05:19:46

0

第一個選項是與一個條件更好的檢查可以決定。 所以如果value!= null那麼只有它會進入否則它甚至不會進入條件塊。 但在第二個選項中,它將檢查條件,如果爲false,則檢查其他條件(對於值== null)。