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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德云 金牌黑马   /  2011-12-17 17:35  /  9284 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德云 于 2011-12-17 22:05 编辑

if else为什么比Switch效率低??

评分

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

查看全部评分

8 个回复

倒序浏览
因为switch的条件简单.而if   else所比较的条件会比switch的复杂
回复 使用道具 举报
首先要看一个问题,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:
}

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
Sponge + 1 精辟
王德云 + 1

查看全部评分

回复 使用道具 举报
1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选
  择执行哪一个case的语句块
3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载
  一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
自己玩 + 1
王德云 + 1

查看全部评分

回复 使用道具 举报
Sponge 黑马帝 2011-12-17 20:20:18
报纸
楼上的说的很好,我就不再说了
回复 使用道具 举报
学习过了……{:soso_e113:}
回复 使用道具 举报
Good,很好。学习了
回复 使用道具 举报
王杰 黑马帝 2012-1-8 11:51:49
8#
因为当虚拟机读到switch的时候将所有的判断数据都加载在内存中了,而if是边判断边加载,所以就慢一些,
一般如果判断数据不多,而且是byte,short,int或是char类型的时候一般用switch,那样效率比较高.
回复 使用道具 举报
zlloyd 中级黑马 2017-4-22 00:40:31
9#
学习了  !!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马