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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孔肖 中级黑马   /  2012-9-7 15:43  /  2402 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师在视频中讲到 switch的效率比if else 的高,在网上查了查,有很多分歧的地方,这里想请高手讲一讲它们运行的效率问题。并且switch和for循环的比较又是怎么样?
(这里不考虑代码书写简便与否的问题,只考虑效率与用法问题)

public class Test
{
      public static void main(String[] args)
      {
            // 一下代码仅为演示,不考虑书写简便与否的问题            

            //  switch 和 if else 的比较 (同样是遍历,为什么switch效率高呢?这里不考虑判断多少的问题)
             char x = 'b';
  
            if(x=='a')
               System.out.println("a");
           else if(x=='b')
               System.out.println("b");
           else
               System.out.println("no");
  
          switch('b')
          {
               case 'a':System.out.println("a");break;
               case 'b':System.out.println("b");break;
               default :System.out.println("no");
          }
  

        // switch 和 for循环的比较 (同样是遍历,它们的效率又是怎么样的呢?这里不考虑遍历多少的问题)
         for(int i=1; i<=3; i++)
              System.out.println(i);
  
         switch(1)
         {
              case 1:System.out.println(1);
              case 2:System.out.println(2);
              case 3:System.out.println(3);
          }
    }
}

4 个回复

倒序浏览
switch是if else在特定情况下的另一种写法,通用的情况下,效率是一样的。
switch是分支结构,用于判断,for是循环结构,用法不同,没法比。
既然讨论效率,数量的多少肯定是很重要的一个因素,不能不考虑。
而且cpu处理循环比单独处理多次更快一些。
回复 使用道具 举报
本帖最后由 应广驰 于 2012-9-7 15:59 编辑

for循环和switch没有多大的可比性,一个是主要选择语句,一个是循环
而switch查找有点类似于二分查找,他的变量条件选项需要是一个范围类的值,所以查找相对会比if快,但是switch的局限性相对就比较大了,而且还有一点,if每次都要判断表达式,而switch只要判断一次就行了
回复 使用道具 举报
switch和for循环我个人认为两者之间没有什么比较性,switch有分支机构,当做判断的时候用,效率要高一些;而for就是一个循环机构,for循环再栈内存里应该是循环结束之后就释放内存。
回复 使用道具 举报
楼上诸位, 我知道 switch 和for循环没必要比较。 我只是为了多考虑一些。

但是各位,对于for循环而言,每次输出之后都要进行一次运算,然后再进行一次判断。。。而switch再没有break的情况下,会依次往下执行。
这样一来的话,switch的效率是不是比for循环的要高一些呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马