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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sunflower丶 中级黑马   /  2014-8-10 20:53  /  2363 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求解答?

点评

http://bbs.itheima.com/forum.php?mod=viewthread&tid=136279&page=1#pid911013  发表于 2014-8-10 20:54

16 个回复

倒序浏览
  因为对于if判断条件来说,他会被虚拟机寄存器多次读取到,因为你如果第一个if不匹配的话还要进行后面的if判断,那么寄存器就会多次重复的读取这个变量,多次的读取肯定没有switch语句这样子的一锤子买卖来的更直接。一般我们衡量一段代码的好坏时主要评价标准就是代码的运行效率,前者明显没后者高效,所以才有你的这种说法吧。。
回复 使用道具 举报
不是绝对的吧,好吧我只是个新人
回复 使用道具 举报
2楼说的很清楚了
回复 使用道具 举报
先问是不是,再问为什么。
当然不是,switch 能做的 if 都能做,switch 不能做的 if 也能做,而 switch 不能做的太多了。在 switch 能用的情况里(由于情况太少所以一看就知道能用),也不会故意不用它,根本没有比较的必要吧
回复 使用道具 举报
我觉得if else蛮好的啊,视频讲解里面,也是推荐我们一般情况下使用if else
回复 使用道具 举报
switch 用于有明确选项的,比如输入数字 判断 星期,月,季节,年
if()用于某种特定范围   比如表达式,数字范围

看需求,没有绝对的  
回复 使用道具 举报
sunny~ 中级黑马 2014-8-10 21:56:48
8#
各有各的好处
回复 使用道具 举报
应该是具体情况具体分析的,什么事情都没有绝对的。
回复 使用道具 举报
两种不同的条件下使用吧,switch 一般用在条件已知,且准确的环境下
回复 使用道具 举报
要看你从哪方面说了?是效率还是循环的复杂程度!
回复 使用道具 举报
switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
具体地说,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引号),程序接着跳到此地址执行,到此完成了分支的跳转。

switch有点以空间换时间的意思,而事实上也的确如此。
1.当分支较多时,当时用switch的效率是很高的。因为switch是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是if。。else是遍历所以得可能值,知道找到符合条件的分支。如此看来,switch的效率确实比ifelse要高的多。
2.switch...case占用较多的代码空间,因为它要生成跳表,特别是当case常量分布范围很大但实际有效值又比较少的情况,switch...case的空间利用率将变得很低。
3.switch...case只能处理case为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用switch...case来处理的。所以,switch只能是在常量选择分支时比ifelse效率高,但是ifelse能应用于更多的场合,ifelse比较灵活。
回复 使用道具 举报
Joemi 中级黑马 2014-8-11 07:51:32
13#
我还是第一次知道switch效率高,以前都不关注这个
回复 使用道具 举报
二楼和12楼说的很清楚。
回复 使用道具 举报
if else 结构没有switch 清晰,其次。if else 会消耗更多资源
回复 使用道具 举报
icris 中级黑马 2014-8-11 09:17:16
16#
算了,放个链接
http://fishermen.iteye.com/blog/430286
已做试验,30个条件循环100000000次,
if consume time:4,switch consume time:57

<q>talk is cheap, show me the code.</q>
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马