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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘郑瑞 中级黑马   /  2013-1-21 10:28  /  2552 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

switch为什么比if...else的效率高?请赐教,详细点。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

9 个回复

倒序浏览
这个似乎涉及到底层了。好像是汇编那方面了
回复 使用道具 举报
因为switch的参数只能是int(其他6个基本数据类型的值,或自动提升安全转换,或强制转换,都可以)
而if的条件可以很复杂,这样,其实编译器就顺便给switch做了优化,为了提高效率嘛!而if的条件复杂,编译器就不管咯。

评分

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

查看全部评分

回复 使用道具 举报
请问楼主如何知道switch比if...else的效率高的?
回复 使用道具 举报
我的理解,switch是选择题,
if...else是判断题,

switch是选择,给你个值给我找出这个值(选项的所有内容直接进内存比较),直接干活.
if...else是先判断,再干活,读到哪一句,那一句的内容进内存,进行逻辑判断.

也不知道对不对

还有一点,好想switch的参数也能char,记得老毕视频上说了

点评

能自动转换为int的就行  发表于 2013-1-22 00:22

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 可以char

查看全部评分

回复 使用道具 举报
这个要视具体情况而定,采用if-else-if语句格式实现多分支结构,实际上是将问题细化成多个层次,并对每个层次使用单、双分支结构的嵌套。
而switch语句则可以直接处理多分支选择结构,当某种算法要用某个变量或表达式单独测试每一个可能的整数值常量,然后做出相应的动作时,则switch语句比if优秀得多。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
“因为switch的条件简单,编译器会为它做二分法优化(或跳转表).平均性能要高一点.而if else所比较的条件会远远比switch的复杂,编译器通常不会做过多的优化.当然你可以手工优化....
一般情况下,是差不多的.“

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
高浩 中级黑马 2013-1-21 22:19:24
8#
switch直接根据输标识去找那种情况,而if else则是一个一个去验证效率当然不高了
回复 使用道具 举报
switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

if/else是一个挨一个的查询,速度较慢,
优点是:不限比较类型和内容,你可以使用double,float,string或是自定义类型,比较双方不必是编译期常量。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
焦健 来自手机 高级黑马 2013-1-23 01:07:22
10#
case时编译时期的常量这种说法我赞同,所以效率略高,switch的功能在不断的完善1.5以后可以判断枚举,1.7以后甚至可以判断字符串,功能还是很强大的!!来自: Android客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马