从JDK7开始支持Switch使用字符串,例如
public void switchString() {
String test = "hello";
switch (test) {
case "world":
System.out.println("我是word");
break;
case "hello":
System.out.println("我是hello");
break;
default:
break;
}
}
但是在JAVA中是如何让swtich支持字符串这个特性的呢?咱们不防看下该代码编译后的class文件
public void switchString()
{
String test = "hello";
String str1;
switch ((str1 = test).hashCode())
{
case 99162322:
if (str1.equals("hello")) {
break;
}
case 113318802:
if ((goto 82) && (str1.equals("world")))
{
System.out.println("我是word");
return;
System.out.println("我是hello");
}
break;
}
}
soga,原来从编译后文件得知先将字符串test的hashcode(整数值)传入switch,每个case也分别计算hashcode,找到对应相等hashcode的case,再通过equals判断传入的字符串是否确实与case的相等。
总结:switch支持字符串的特性,实际上是使用了hashcode()、equals()支撑