黑马程序员技术交流社区

标题: if-else为什么比switch的效率低? [打印本页]

作者: 坚持525    时间: 2014-10-23 21:05
标题: if-else为什么比switch的效率低?
在7K银行业务系统中,循环调用三类客户服务方法,老师用了switch语句,说if-else的效率比switch的低,怎么详细的解释呢?
  1. public void start(){
  2.                 Executors.newSingleThreadExecutor().execute(
  3.                                 new Runnable(){
  4.                                         public void run(){
  5.                                                 //下面这种写法的运行效率低,最好是把while放在case下面
  6.                                                 while(true){
  7.                                                         switch(type){
  8.                                                                 case COMMON:
  9.                                                                         commonService();
  10.                                                                         break;
  11.                                                                 case EXPRESS:
  12.                                                                         expressService();
  13.                                                                         break;
  14.                                                                 case VIP:
  15.                                                                         vipService();
  16.                                                                         break;
  17.                                                         }
  18.                                                 }
  19.                                         }
  20.                                 }
  21.                 );
  22.         }
复制代码

作者: 执着的桶牛    时间: 2014-10-23 22:11
switch只要判断一次type就可以case了,而if-else每一句都要判断一次,很有可能读到最后一句else那才执行。这是我比较浅显的理解··
作者: 金勇杰    时间: 2014-10-23 22:46
if-else需要遍历条件分支,直到命中条件或者分支遍历完;switch会生成一个跳转表来指向它的的case分支,程序首先比较switch的变量与最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址,程序跳到此地址执行分支语句。
作者: 践行渐远    时间: 2014-10-23 22:49
if...else...在执行到“符合要求的判断条件”之前,会将之前的所有不符合的条件判断一遍。
而switch有一个“判断条件结果”与“case value”对应的表,只需运知道判断条件的结果,直接找对应的case执行其后面的代码即可。
作者: 烟默year    时间: 2014-10-24 14:41
if else所具有的判断太多!且必须每一步都进行判断,而switch只需判断一次,再根据case的值进行简短判断,比较方便,但是比较局限,总的来说,无需纠结,适合的时候就用就ok了
作者: cxdzh    时间: 2014-10-24 16:31
就好像岔路口,if要一条路一条路找,这条不是就跳到找下一条,可能找到最后一条才发现正确路线.如果有一万条路,可能就要找一万次

switch走到岔路口的时候,已经有路标指示每一条路都通向哪里,拿自己想要去的目标跟路标一对比,一眼就知道该走哪条路.

switch.jpg (358.65 KB, 下载次数: 57)

switch.jpg





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