1. 程式人生 > >Java中的switch

Java中的switch

類型 語法 hashcode cas efault clas stat 整形 code

switch語句的作用其實就相當於if()else,就是一種選擇語句,語法如下:

switch(表達式){ 
    case 常量表達式1:  語句1;
    case 常量表達式2:  語句2;
    … 
    case 常量表達式n:  語句n;
    default:  語句n+1;
}

需要註意的是switch中表達式的類型可以是byte,short,char,int,enum類型,java7之後

可以使string類型也支持作為表達式,可以研究下原理:

public class StringInSwitchCase { 
      public static void main(String[] args) { 
            String mode = args[0]; 
            switch (mode) { 
                  case "ACTIVE": 
                        System.out.println("Application is running on Active mode"); 
                        break; 
                  case "PASSIVE":
                        System.out.println("Application is running on Passive mode"); 
                         break; 
                  case "SAFE": 
                          System.out.println("Application is running on Safe mode"); 
          } 
      } }

將上述代碼進行反編譯:

public class StringInSwitchCase{ 
      public StringInSwitchCase() { } 

      public static void main(string args[]) { 
             String mode = args[0]; 
            String s; switch ((s = mode).hashCode()) { 
                  default: break; 
                  case -74056953: 
                        if (s.equals("PASSIVE")) { 
                                    System.out.println("Application is running on Passive mode"); 
                         } 
                        break; 
                  case 2537357: 
                        if (s.equals("SAFE")) { 
                              System.out.println("Application is running on Safe mode"); 
                         } 
                        break; 
                  case 1925346054: 
                        if (s.equals("ACTIVE")) { 
                              System.out.println("Application is running on Active mode"); 
                         } 
                        break; 
               } 
          } }

可以清晰的看到,java底層是對string調用了hashCode()方法,而返回的hashCode是int類型,其實還是用hashCode

進行case,然後再用equals進行比較,滿足條件後便執行相應的語句。

由此可見使用string作為表達式不如直接使用整形或者枚舉效率高,因為使用string會額外調用hashCode方法,而且換有可能

出現hash沖突。其實我們在編程中更多地還是使用枚舉來進行條件判斷。

Java中的switch