JDK1.6 的版本中,switch後面的括號裏面只能放int類型的值,注意是隻能放int類型,可是放byte,short,char類型的也能夠。是由於byte,short,shar能夠自動提高(自動類型轉換)爲int。而不能放long型和String型。java
JDK1.7 的版本中,switch中可使用字串String。但仍不支持long型。優化
原理:hashCode()+equals()
編譯器在編譯期間給代碼作了轉換。spa
原始代碼:code
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; } } }