switch 与 if else 的区别

作为同是条件判断的这两条语句,它们之间有什么区别呢?今天我们来探讨一下。

基本语句

if else的代码解构:

//单if语句,满足该条件时执行,不关心不满足的情况if(true){
   
     do something;}
//if else语句,满足该条件时执行,对不满足的情况进行对应处理if(true){
   
     do something;}else{
   
     do other things;}
// 多if语句,依次执行每一条if语句,//满足条件时执行,不满足则进行下一条if的判断。if(case1){
   
     语句一}else if(case2){
   
     语句二}else if(case3){
   
     语句三}

swich的代码解构:​​​​​​​

switch(choose){
   
     case 1:    语句一    break;  case 2:    语句二    break;  case 3:    语句三    break;  default:    默认语句}

从语法结构上看,switch与多if语句比较相似,写代码过程中,很多人会偏向于使用if else,因为相对switch写起来方便,快捷。

switch与if else的执行效率

绝大部分情况下,switch的执行效率要高于if语句。

原因在于:switch语句在运行时,首先会生成一个“跳转表”来指示实际的case分支的地址,而这个“跳转表”的索引号与swtich中的case值是相等的,这样的话,switch就不用像if else那样,遍历所有的条件,直至找到正确条件,而仅仅只需要访问对应索引号的表项就可以到达定位分支的目的。

简单的说,switch会生成一个数据统计表,将case后面的值全部统计起来,匹配时先拿表中的数据进行比较,如果有则直接跳转到相应case语句;如果没有,则直接跳转到default语句。

那if else呢?

if else语句需要一条一条的去进行取值范围的判断,直到找到正确的选项位置,这样的话势必会浪费大量的时间。

所以,单从其运行的效率来看,if else 的时间复杂度为O(n),即最坏的情况下判断n次,switch的时间复杂度为O(1),switch语句要更胜一筹。

总结

简单地总结一下:

1.switch语句由于它独特的case值判断方式,使其执行效率更高,而if else语句呢,则由于判断机制,导致效率稍慢。

2.到底使用哪一个选择语句,和当前的代码环境有关,如果是范围取值,则使用if else语句更为快捷;如果是确定取值,则使用switch更是一个不错的选择。

猜你喜欢

转载自blog.csdn.net/weixin_49707375/article/details/128220943