只是單純地一個接一個比較;if...else每一個條件都計算一遍; 算法
使用了Binary Tree算法;絕大部分狀況下switch會快一點,除非是if-else的第一個條件就爲true
spa
編譯器編譯switch與編譯if...else...不一樣。無論有多少case,都直接跳轉,不需逐個比較查詢;switch只計算一次值,而後都是test , jmp,
編譯器
有不少else if的時候,用switch case比較清晰
it
switch使用查找表的方式決定了case的條件必須是一個連續的常量。而if-else則能夠靈活的多。 編譯
當只有分支比較少的時候,if效率比switch高(由於switch有跳轉表)
分支比較多,那固然是switch test
switch (表達式){
case 值1 : 語句1
break;
case 值2 : 語句2
break;
...
default : 語句n
break;
} 效率
從表達式值等於某個case語句後的值開始,它下方的全部語句都會一直運行,直到遇到一個break爲止。隨後,switch語句將結束,程序從switch結束大括號以後的第一個語句繼續執行,並忽略其餘case。
假如任何一個case語句的值都不等於表達式的值,就運行可選標籤default之下的語句。
假如表達式的值和任何一個case標籤都不匹配,同時沒有發現一個default標籤,程序會跳過整個switch語句,從它的結束大括號以後的第一個語句繼續執行。 程序