1. 程式人生 > >swtich與if else是否能作用在byte上,作用在long上,作用在String上?

swtich與if else是否能作用在byte上,作用在long上,作用在String上?

http://blog.csdn.net/kobejayandy/article/details/9286579

http://blog.csdn.net/kehui123/article/details/5298337

switch(expr1)中,expr1是一個整數表示式。因此傳遞給 switch 和 case 語句的引數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。

資料顯示switch語句反而比ifelse的執行效率要高。
 下面來詳細描述switch與ifelse的區別。
 switch...case與if...else的根本區別在於,switch...case會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch變數的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。


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

switch只能是在常量選擇分支時比ifelse效率高,但是ifelse能應用於更多的場合,ifelse比較靈活。