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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 坚持525 中级黑马   /  2014-10-23 21:05  /  1771 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在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.         }
复制代码

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

6 个回复

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

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

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

switch.jpg

点评

有道理!  发表于 2014-10-24 17:19

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

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