switch...case 和 if...else效率比較和優化
阿新 • • 發佈:2019-02-08
switch...case寫法:
switch (表示式){
case 值1 : 語句1 break;
case 值2 : 語句2 break;
...
default : 語句n break;
}
if...else寫法:
if(boolean){
}else if(boolean){
}else if(boolean){
}else{
}
由此看來,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比較靈活。
相關文章參考:
提高你的Java程式碼質量吧:小心switch帶來的空值異常