发布日期:2013-03-06 13:25 来源:未知 标签: Java 分支 控制语句 switch
 

Java中有一个和if语句比较相似的分支控制语句叫switch ,它在有一系列固定值做分支时使用效率要比if-else方式效率高(别急,等一下再告诉你为什么效率高)。

先看一个例子:假设我们不考虑闰年的话,我们如何知道一个月有多少天?先用if-else的方式来实现:

 public class Lesson06_2 { 

     public static void main(String[] args) { 

         int month=9; 

         if(month==1){ 

             System.out.println(month+"月有31天"); 

         }else if(month==2){ 

             System.out.println(month+"月有28天"); 

         }else if(month==3){ 

             System.out.println(month+"月有31天"); 

         }else if(month==4){ 

             System.out.println(month+"月有30天"); 

         }else if(month==5){ 

             System.out.println(month+"月有31天"); 

         }else if(month==6){ 

             System.out.println(month+"月有30天"); 

         }else if(month==7){ 

             System.out.println(month+"月有31天"); 

         }else if(month==8){ 

             System.out.println(month+"月有31天"); 

         }else if(month==9){ 

             System.out.println(month+"月有30天"); 

         }else if(month==10){ 

             System.out.println(month+"月有31天"); 

         }else if(month==11){ 

             System.out.println(month+"月有30天"); 

         }else if(month==12){ 

             System.out.println(month+"月有31天"); 

         }else{ 

             System.out.println("没有这个月份吧"); 

         } 

     } 

 }

接下来我们使用switch语句重新实现一次:

 public class Lesson06_4 { 

     public static void main(String[] args) { 

         int month = 9; 

         switch (month) { 

         case 1: 

             System.out.println(month + "月有31天"); 

             break; 

         case 2: 

             System.out.println(month + "月有28天"); 

             break; 

         case 3: 

             System.out.println(month + "月有31天"); 

             break; 

         case 4: 

             System.out.println(month + "月有30天"); 

             break; 

         case 5: 

             System.out.println(month + "月有31天"); 

             break; 

         case 6: 

             System.out.println(month + "月有30天"); 

             break; 

         case 7: 

             System.out.println(month + "月有31天"); 

             break; 

         case 8: 

             System.out.println(month + "月有31天"); 

             break; 

         case 9: 

             System.out.println(month + "月有30天"); 

             break; 

         case 10: 

             System.out.println(month + "月有31天"); 

             break; 

         case 11: 

             System.out.println(month + "月有30天"); 

             break; 

         case 12: 

             System.out.println(month + "月有31天"); 

             break; 

         default: 

             System.out.println("没有这个月份吧"); 

             break; 

         } 

     } 

 }

运行2个程序,结果都是 9月有30天。

image

从简洁程度和效率上,switch都略胜一筹(上面的2个程序,把输出语句屏蔽掉,各自循环运行10亿次,switch快了6636毫秒,也就是6秒钟)。

为什么会快一些呢,因为switch是在编译时优化的。运行时进行的不是变量的比较运算,而是直接跳转。举个例子7×9你是反射式的出来的结果,9×7你需要稍稍楞一小下,99×7你就需要计算一下了。这就是他们之间的区别。

相关评论

专题信息
    本教程的主要讲解java语言的核心基础知识,使读者能有个良好的语言基础,为以后进一步提高打下基础。宗旨是帮助更多想学习java的朋友快速入门,如果你是一个Java语言的初学者,那么就从Java教程,java数组,java环境变量配置,java网络编程,技巧等这里开始学习Java吧!