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