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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄茂霖 中级黑马   /  2013-4-24 15:30  /  1607 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

switch为什么比if效率要高?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

8 个回复

倒序浏览
两种判断方式各有自己的优势,要看具体的情况了,主要在于编译器对其优化程度。
回复 使用道具 举报
因为switch的条件简单,编译器会为它做二分法优化(或跳转表).平均性能要高一点.
而if else所比较的条件会远远比switch的复杂,编译器通常不会做过多的优化.
当然你可以手工优化....基本上差不多。
回复 使用道具 举报
楼主可以整理下学到的关于if和switch的相关知识不?
整理好发帖以:“第一帖”之if与switch的(具体你整理的知识点)为名
好的话我会加分
回复 使用道具 举报
这个效率不一定哪个快,的看在是情况下使用了,如果if第一个值就为true基本也比不出哪个效率高,非要说switch效率高 那或许是switch在编译器里优化稍微高于if
回复 使用道具 举报
if 语句适用范围比较广,而 switch 只能对基本数据(byte、short、char和int)类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
swith(a)
{
case o:....
        break;
case 1:.....
        break;
......
}a被读入内存后,别的数据就一一和a对比,看是不是a所满足的数据,然后执行后面相应的操作,不是的话,就进行下一个数据和a比较

if(a==0)
{};
else if(a==1)
{};
else if
{};
......这里对a进行判断,若没有满足条件,就继续向后判断,没判断一次都要把a重新加载一次
打个比方:保安公司招人,标准时175和175以上的人可以。现在有两种方式选拔
第一种:直接把测身高的工具放到175上,每一个人只要往呢里一站,只要是尺子以上的都符合条件
第二种:不固定测量工具的高度,来一个人就量一次,然后看量得数据有没有175大,因为每个人的身高各异,所以就要不停的调节测量工具
在这里:swith就类似于第一种的情况;if就类似第二种的情况

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
哪个效率高,这要看情况。
switch 主要在要判断的数值不多时选用,一般是具体的数据类型,byte short int char
如果if语句的判断条件也不多,那么,就很难分出 哪个效率高。
如果if判断条件多时效率就不是很高了,当然,这时候就不用switch了。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
这个怎么分高效不高效啊,得请出几位编译原理高手进来瞧瞧。。。
回复 使用道具 举报
switch判断的时候,不需要从前到后去遍历元素,switch可以直接找到与他匹配的条件
if判断的时候,就需要从前到后遍历元素,直到找到匹配的条件为直
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马