switch 和 if 都是用来处理分支语句的,那么使用的时候,考虑到代码效率问题,就必须先来了解他们有什么区别。
先来看看这两个语句的使用格式:
- if…else…
if (表达式1)
{
语句1;
}
else if (表达式2)
{
语句2;
}
else if (表达式3)
{
语句3;
}
else if (表达式4)
{
语句4;
}
...
else
{
语句n+1;
}
- switch…case…
switch (表达式)
{
case 值1:语句1;break;
case 值2:语句2;break;
case 值3:语句3;break;
case 值4:语句4;break;
case 值5:语句5;break;
...
default:语句n+1;break;
}
if语句每执行一次都要先判断条件表达式是true还是false,为true时执行相应语句,若为false则继续判断下一个表达式,直到最后一个else结束。线性执行。
switch语句只需在入口时计算表达式的值,然后查找跳转表,执行对应语句,否则default。类似二叉树。
区别一:
switch…case…只能用于case值为常量的分支结构,而if…else…更加灵活。
区别二:
if判断条件为逻辑表达式,可以是布尔类型的合法表达式、可以是常量、枚举等。而switch 通常处理算术表达式,或字符。。
区别三:
switch 进行一次条件判断后直接执行到程序的条件语句。而if…else 有几种条件,就得判断多少次。
区别四:
相比if语句,switch语句是以空间换时间的分支结构。因为它要生成跳转表,所以占用较多的代码空间。当case常量分布范围很大但实际有效值又比较少的情况,switch…case的空间利用率将变得很低。
区别五
分支较多时,使用switch的效率高于if,除非第一个if条件就为真。。
其次,当分支较多时,使用if…else…代码可读性不如switch…case…高。