黑马程序员技术交流社区

标题: switch和if [打印本页]

作者: 黄茂霖    时间: 2013-4-24 15:30
标题: switch和if
switch为什么比if效率要高?
作者: 张建国    时间: 2013-4-24 15:37
两种判断方式各有自己的优势,要看具体的情况了,主要在于编译器对其优化程度。
作者: 殇_心。    时间: 2013-4-24 15:48
因为switch的条件简单,编译器会为它做二分法优化(或跳转表).平均性能要高一点.
而if else所比较的条件会远远比switch的复杂,编译器通常不会做过多的优化.
当然你可以手工优化....基本上差不多。
作者: 曹睿翔    时间: 2013-4-24 15:59
楼主可以整理下学到的关于if和switch的相关知识不?
整理好发帖以:“第一帖”之if与switch的(具体你整理的知识点)为名
好的话我会加分
作者: 尹丽峰    时间: 2013-4-24 16:09
这个效率不一定哪个快,的看在是情况下使用了,如果if第一个值就为true基本也比不出哪个效率高,非要说switch效率高 那或许是switch在编译器里优化稍微高于if
作者: yp324    时间: 2013-4-24 17:02
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就类似第二种的情况
作者: 王婷婷    时间: 2013-4-24 17:08
哪个效率高,这要看情况。
switch 主要在要判断的数值不多时选用,一般是具体的数据类型,byte short int char
如果if语句的判断条件也不多,那么,就很难分出 哪个效率高。
如果if判断条件多时效率就不是很高了,当然,这时候就不用switch了。

作者: Miss小强    时间: 2013-4-24 17:30
这个怎么分高效不高效啊,得请出几位编译原理高手进来瞧瞧。。。
作者: 付鑫鑫    时间: 2013-4-24 18:49
switch判断的时候,不需要从前到后去遍历元素,switch可以直接找到与他匹配的条件
if判断的时候,就需要从前到后遍历元素,直到找到匹配的条件为直




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2