请教为什么switch的效率要比if else 高?

一头头 2009-01-14 02:49:37
请教为什么switch的效率要比if else 高?

希望从编译原理的角度分析 谢谢哇
...全文
4470 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Calon Mo 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cydp007 的回复:]

switch 只判断一次.. 就 case 了.

if else 要判断很多次. 比如一个结果你要在 最后的一个 else里面.. 是不是要把前面的if全判断一遍呢?
[/Quote]



难道switch不是一个个比较的吗?你需要的数字也是在最后的那个case呢?难道他直接跳到最后那个case吗?
siph 2011-06-09
  • 打赏
  • 举报
回复
学习,不知C++和Java的处理方式是不是相同的
yangleit 2010-04-01
  • 打赏
  • 举报
回复
我来总结一下吧。
首先大家去看看一本书《C++ Footprint and Performance Optimization》,里面的7章,第一节。

然后根据大量的实际程序测试(不考虑不同的编译器优化程度差异,假设都是最好的优化),那么Switch语句击中第三个选项的时间跟if/else if语句击中第三个选项的时间相同。
击中第一,第二选项的速度if语句快,击中第四以及第四之后的选项的速度switch语句快。

所以,如果所有选项出现概率相同的话,结论就是:5个选项(包括default)的情况下,switch和if/else if相同。低于5个选项if快,高于5给选项switch快!
aman_cao 2009-12-08
  • 打赏
  • 举报
回复
太牛B了,学习了
ycfbhsk 2009-01-22
  • 打赏
  • 举报
回复
switch 进行一次条件判断后直接执行到程序的条件语句
ifelse 有几种条件,就得判断多少次
ifelse和switch效率有区别,但并不能说明ifelse一无事处,有时为了可读性或者其他方面,ifelse有它的优势。
dxc803 2009-01-21
  • 打赏
  • 举报
回复
不懂,不明白。
cyber_bss 2009-01-15
  • 打赏
  • 举报
回复
很强大。。
kao331431214 2009-01-15
  • 打赏
  • 举报
回复
额 企鹅兄 还是那样相当的专业啊
学习ING
heavenfeng 2009-01-15
  • 打赏
  • 举报
回复
很了好几次的这样反编译的方式去看代码,我更关心如何自己开始去用这样的方式去读,能不能谁介绍下,

比方
0: iconst_3
1: istore_1
2: iload_1
3: lookupswitch{ //4
3: 44;
20: 55;
50: 66;
100: 77;
default: 85 }
44: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
47: ldc #3; //String 3
这样的,istore_1
iload_1是啥意思完全弄不懂,
cangyue87 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 xiaoduan5267 的回复:]
太强大了,请问这用的是什么反编译软件?
[/Quote]
那是字节码喵~~~`
Miracle1216 2009-01-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ZangXT 的回复:]
switch可以进行跳转优化,java中对switch有两种处理方式,生成不同的jvm指令,一是tableswitch,一个是lookupswitch.
对于case的分支比较密集的情况,如

Java code
public class Test {

public static void main(String[] args) {
int i = 3;
switch (i) {
case 0:
System.out.println("0");
break;
case 1:
Sys…
[/Quote]
太强大了,请问这用的是什么反编译软件?
「已注销」 2009-01-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ilysony 的回复:]
学习了。!
[/Quote]zzz
chxy148 2009-01-14
  • 打赏
  • 举报
回复
分析很透彻
heidian 2009-01-14
  • 打赏
  • 举报
回复
很好,很强大
MyLinda 2009-01-14
  • 打赏
  • 举报
回复
学习了...
dnybz 2009-01-14
  • 打赏
  • 举报
回复
太强大了。
一头头 2009-01-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ZangXT 的回复:]
写了篇blog,详细的分析了一下
http://blog.csdn.net/ZangXT/archive/2009/01/14/3777897.aspx
[/Quote]

相当专业
ZangXT 2009-01-14
  • 打赏
  • 举报
回复
写了篇blog,详细的分析了一下
http://blog.csdn.net/ZangXT/archive/2009/01/14/3777897.aspx
Sou2012 2009-01-14
  • 打赏
  • 举报
回复
学习了。!
bigbro001 2009-01-14
  • 打赏
  • 举报
回复
学习了。。。
加载更多回复(10)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧