1. 程式人生 > >2. Switch能否用String做引數?

2. Switch能否用String做引數?

Switch語句的引數型別

JDK1.6 的版本中,switch後面的括號裡面只能放int型別的值,注意是隻能放int型別,但是放byte,short,char型別的也可以。是因為byte,short,shar可以自動提升(自動型別轉換)為int。而不能放long型和String型。
JDK1.7 的版本中,switch中可以使用字串String。但仍不支援long型。
原理:hashCode()+equals()
編譯器在編譯期間給程式碼做了轉換。

原始程式碼:

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"); } } }

編譯器優化後:

import java.io.PrintStream; 

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; } } }