switch接受的参数类型有10种,byte,short,int,char,和他们的封装类Byte,Short,Integer,Character,引用类型的String(SE1.7之后),enum(SE1.5之后)。
又给自己挖个坑enum o(╥﹏╥)o Java博大精深
这是一篇关于Switch(String)的实现的译文转载:
http://www.importnew.com/14597.html
原文通过对Switch(String str)进行反编译,最后发现switch实现是通过hashcode()和equals(),switch后面跟着的还是整型。
/** * Java Program to demonstrate how string in switch functionality is implemented in * Java SE 7 release. */
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");
}
}
}
~~~插一句:反编译好像很吊啊,之前那篇自动拆装箱也是用反编译。
/** * Reverse Engineered code to show how String in Switch works in Java. */
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;
}
}
}
总结一下:switch在实现String的时候就是一个语法糖,没有实际的内部功能,所以面试的时候可以说String只支持整型,然后bb一堆,吊爆了,但是笔试的时候还是要说switch支持String。
在上面那篇译文结尾,作者提到枚举比整型或者是String都要好,枚举博客见。
互勉