A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范晓冲 中级黑马   /  2014-1-1 16:11  /  1670 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【if语句】和【switch语句】有何区别?何时使用【if语句】?何时使用【switch语句】?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
一、效率

switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true

编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询


二、计算方式

if-else只是单纯地一个接一个比较,效率比较低;if…else是每个条件都要计算一遍的.

switch只计算一次值,然后都是test , jmp,


switch的效率与分支数无关   

当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)   
分支比较多,那当然是switch


三、代码清晰度

有很多else if的时候,用switch case比较清晰


四、查找方式

相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

五、switch case语句

switch (表达式){
case 值1 : 语句1
break;

case 值2 : 语句2
break;


default : 语句n
break;
}

回复 使用道具 举报
776699 发表于 2014-1-1 17:14
一、效率

switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-el ...

厉害,看来挺听明白的
回复 使用道具 举报
switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
回复 使用道具 举报
简单点来想就是  wwitch 相当于物理中学的单路多线开关   if就是我们常用的判断语句
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马