Java中的switch
阿新 • • 發佈:2018-02-01
類型 語法 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