最近在工作中又学到了一点,switch case() 括号中只能是常量,即使是加了final修饰的常变量也不行
如果判断条件中含有变量,用if else
但是switch扩展性较好,自己看情况斟酌
效率问题:当分支情况较多时(超过三个,之前在别人博客看到的,我没验证,对不起,我没有钻研精神),switch效率比if要高
下面来详细描述switch与ifelse的区别:
switch…case与if…else的根本区别在于,switch…case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch…case不用像if…else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
具体地说,switch…case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。