黑马程序员技术交流社区

标题: switch为什么比if...else的效率高 [打印本页]

作者: 刘郑瑞    时间: 2013-1-21 10:28
标题: switch为什么比if...else的效率高
switch为什么比if...else的效率高?请赐教,详细点。
作者: 黄锦成    时间: 2013-1-21 11:39
这个似乎涉及到底层了。好像是汇编那方面了
作者: 杨浩    时间: 2013-1-21 13:31
因为switch的参数只能是int(其他6个基本数据类型的值,或自动提升安全转换,或强制转换,都可以)
而if的条件可以很复杂,这样,其实编译器就顺便给switch做了优化,为了提高效率嘛!而if的条件复杂,编译器就不管咯。
作者: VOIDMAIN    时间: 2013-1-21 13:44
请问楼主如何知道switch比if...else的效率高的?
作者: 张世钦    时间: 2013-1-21 14:38
我的理解,switch是选择题,
if...else是判断题,

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

也不知道对不对

还有一点,好想switch的参数也能char,记得老毕视频上说了
作者: 杨长川    时间: 2013-1-21 17:20
这个要视具体情况而定,采用if-else-if语句格式实现多分支结构,实际上是将问题细化成多个层次,并对每个层次使用单、双分支结构的嵌套。
而switch语句则可以直接处理多分支选择结构,当某种算法要用某个变量或表达式单独测试每一个可能的整数值常量,然后做出相应的动作时,则switch语句比if优秀得多。
作者: 黑马斯巴达    时间: 2013-1-21 19:11
“因为switch的条件简单,编译器会为它做二分法优化(或跳转表).平均性能要高一点.而if else所比较的条件会远远比switch的复杂,编译器通常不会做过多的优化.当然你可以手工优化....
一般情况下,是差不多的.“
作者: 高浩    时间: 2013-1-21 22:19
switch直接根据输标识去找那种情况,而if else则是一个一个去验证效率当然不高了
作者: 黑马张旭    时间: 2013-1-22 21:59
switch的case条件都是编译期整数常量,编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

if/else是一个挨一个的查询,速度较慢,
优点是:不限比较类型和内容,你可以使用double,float,string或是自定义类型,比较双方不必是编译期常量。
作者: 焦健    时间: 2013-1-23 01:07
case时编译时期的常量这种说法我赞同,所以效率略高,switch的功能在不断的完善1.5以后可以判断枚举,1.7以后甚至可以判断字符串,功能还是很强大的!!




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