public class Test { public void test(String type) { switch (type) { case "状况A": break; case "状况B": break; default: break; } } }
public class Test { public void test(String paramString) { String str = paramString; int i = -1; switch (str.hashCode()) { case 24455345: if (!str.equals("状况A")) break; i = 0; break; case 24455346: if (!str.equals("状况B")) break; i = 1; } switch (i) { case 0: break; case 1: break; } } }
原理: jdk1.7在switch语句中能够支持string类型的参数,实际上,这个新特性是在编译器层次实现的,而在java虚拟机和字节码层次上,仍是只支持switch语句中使用与整数类型兼容的类型。这样作的目的是为了减小这个特性所影响的范围,以下降实现的代价。在编译器层次实现的含义是,虽然开发人员在java源代码的switch语句中是用字符串类型,可是在编译的过程当中,编译器会根据源代码的类型进行转换,将字符串类型转换成与整数类型兼容的类型,不一样的java编译器可能采用不一样的方式类实现这个转换,并采起不一样的优化策略。java