switch與ifelse的效率問題

2021-06-18 07:22:05 字數 728 閱讀 6656

switch...case與if...else的根本區別在於,switch...case會生成乙個跳轉表來指示實際的case分支的位址,而這個跳轉表的索引號與switch變數的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。

具體地說,switch...case會生成乙份大小(表項數)為最大case常量+1的跳表,程式首先判斷switch變數是否大於最大case 常量,若大於,則跳到default分支處理;否則取得索引號為switch變數大小的跳表項的位址(即跳表的起始位址+表項大小*索引號),程式接著跳到此位址執行,到此完成了分支的跳轉。

1.當分支較多時,當時用switch的效率是很高的。因為switch是隨機訪問的,就是確定了選擇值之後直接跳轉到那個特定的分支,但是if。。else是遍歷所以得可能值,知道找到符合條件的分支。如此看來,switch的效率確實比ifelse要高的多。

2.switch...case占用較多的**空間,因為它要生成跳表,特別是當case常量分布範圍很大但實際有效值又比較少的情況,switch...case的空間利用率將變得很低。

3.switch...case只能處理case為常量的情況,對非常量的情況是無能為力的。例如 if (a > 1 && a < 100),是無法使用switch...case來處理的。所以,switch只能是在常量選擇分支時比ifelse效率高,但是ifelse能應用於更多的場合,ifelse比較靈活。

switch與if else的區別

單從jvm的執行效率上講的話,switch的執行效率要高於if語句 原因在於 switch語句在執行時,首先會生成乙個 跳轉表 來指示實際的case分支的位址,而這個 跳轉表 的索引號與swtich中的case值是相等的,這樣的話,switch就不用像if else那樣,遍歷所有的條件,直至找到正確...

switch case與if else執行效率分析

結論 switch.case的效率會比if.else要高一些 一 if.else語句 對if.else函式反彙編後,能看見這個函式所採用的方法是按順序去比較 jne表示 當不等於時轉移 如果輸入的數值所對應的if條件靠後的話,會進行較多次的對比判斷後,才能進入對應的分支。二 switch.case語...

switch 與 if else 效能區別

最近閒來無事,就測測switch 和if else的效能區別 我的電腦是i3的。public static void main string args else if k 2 else if k 3 else if k 4 else if k 5 else if k 6 long end1 syst...