黑马程序员技术交流社区

标题: if else 和switch case 的区别 [打印本页]

作者: 毛羚杨    时间: 2014-2-23 15:49
标题: if else 和switch case 的区别
咱们都知道if 判断比起switch 的效率要低 ,谁能够简单的说明 他们到底是什么地方的改变能够出现效率的问题 这个涉及到算法,有人能解决吗 ?  

作者: 赵永生    时间: 2014-2-23 17:56
switch的case条件都是编译期整数常量(1.7支持字符串),编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

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

switch 只判断一次.. 就 case 了.
           if else 要判断很多次.  比如一个结果你要在 最后的一个 else里面.. 是不是要把前面的if全判断一遍呢?
作者: 毛羚杨    时间: 2014-2-23 18:03
赵永生 发表于 2014-2-23 17:56
switch的case条件都是编译期整数常量(1.7支持字符串),编译器可以做到表格跳转查询,查找速度快,
缺点 ...

这个解释还是不错的哦,不知道是不是表面的原因就是这样的,不过我听老师讲的 这个是算法上的优化,我想你应该是正确的 多谢啦
作者: sgs_gzy    时间: 2014-2-23 18:15
区别就是if()else if()……只能执行一个if里面的代码,但是switch不同,只要case中代码运行完,不遇到break;就继续按顺序执行下一个case中的代码。
作者: xiaochen33520    时间: 2014-2-23 18:33
区别在于switch case在类加载时这个代码块就加载进内存了。而if else是在编译过后运行时才加载进入内存的。这就是区别。
作者: luoanjade    时间: 2014-2-23 19:26
sgs_gzy 发表于 2014-2-23 18:15
区别就是if()else if()……只能执行一个if里面的代码,但是switch不同,只要case中代码运行完,不遇到break ...

case里面没有break的用法挺少的吧?
作者: osully    时间: 2014-2-23 19:27
如果判断的具体数值不多,而是符合byte short int char这四种类型。
虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。




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