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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毛羚杨 中级黑马   /  2014-2-23 15:49  /  1734 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

咱们都知道if 判断比起switch 的效率要低 ,谁能够简单的说明 他们到底是什么地方的改变能够出现效率的问题 这个涉及到算法,有人能解决吗 ?  

评分

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

查看全部评分

6 个回复

倒序浏览
switch的case条件都是编译期整数常量(1.7支持字符串),编译器可以做到表格跳转查询,查找速度快,
缺点是:case条件都是编译期整数常量

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

switch 只判断一次.. 就 case 了.
           if else 要判断很多次.  比如一个结果你要在 最后的一个 else里面.. 是不是要把前面的if全判断一遍呢?

评分

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

查看全部评分

回复 使用道具 举报 1 0
赵永生 发表于 2014-2-23 17:56
switch的case条件都是编译期整数常量(1.7支持字符串),编译器可以做到表格跳转查询,查找速度快,
缺点 ...

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

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

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

评分

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

查看全部评分

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