黑马程序员技术交流社区

标题: 关于 if else 、switch、for循环的疑惑 [打印本页]

作者: 孔肖    时间: 2012-9-7 15:43
标题: 关于 if else 、switch、for循环的疑惑
老师在视频中讲到 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);
          }
    }
}
作者: 孙岳    时间: 2012-9-7 15:52
switch是if else在特定情况下的另一种写法,通用的情况下,效率是一样的。
switch是分支结构,用于判断,for是循环结构,用法不同,没法比。
既然讨论效率,数量的多少肯定是很重要的一个因素,不能不考虑。
而且cpu处理循环比单独处理多次更快一些。
作者: 广驰    时间: 2012-9-7 15:54
本帖最后由 应广驰 于 2012-9-7 15:59 编辑

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

但是各位,对于for循环而言,每次输出之后都要进行一次运算,然后再进行一次判断。。。而switch再没有break的情况下,会依次往下执行。
这样一来的话,switch的效率是不是比for循环的要高一些呢?





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