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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈帅雷 黑马帝   /  2011-12-21 23:18  /  3406 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈帅雷 于 2011-12-22 09:24 编辑

if else 为什么比switch执行效率低,张老师视频中的问题,研究研究{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

5 个回复

倒序浏览
首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
说到基本类型的数值比较,那当然要有两个数。然后重点来了——
if 语句每一句都是独立的,看下面的语句:
if (a == 1) ...
else if (a == 2) ...
这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
于是 switch case 就出来了,把上面的改成 switch case 版本:
switch (a) {
        case 0:
                break;
        case 1:
}
因为特定的规则,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很多开销。

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
switch 只判断一次,就可以直接运行相应的 case 里面的语句。switch-case可以用在简单的判断上。
而if else要判断很多次,每一种情况都要从开始进行比较, 比如一个结果在最后的一个 else里面,则需要把前面的if全判断一遍。
所以switch的效率要比if else 高。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
李娟 黑马帝 2011-12-22 08:46:39
板凳
switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true. 说实话  我也没有深入研究过这个问题的根源 只是在实际开发中  没有人会去用很多很多else if的 都是用 switch case 的  后者比较清晰  给人感觉就是一个脑子很清楚的人写出来的东西,至于效率的本质,编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
int a = 5;
switch(a)
{
case 1: cout << '1';
break;
case 2; cout << '2';
break;
case 3:cout << '3';
break;
case 4:cout << '4';
break;
case 5:cout << '5';
break;
default:cout "no";
}



if (1==a)
   cout << '1';
else if(2==a)
   cout << '2';
else if(3==a)
   cout << '3';
else if(4==a)
   cout << '4';
else if(5==a)
   cout << '5';
else
   cout << "no";



首先看上面的例子,switch语句只是判断当a等于多少时,直接判断相应的语句,而if else需要判断多个语句,所以switch比if else执行效率要高。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
我感觉如果只是
if(true)
{}
else
{}
那就和switch没什么区别,如果多个ifelse就不如switch了嘛,判断的多了就效率低了,switch是树查找

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马