你在字节码文件中看到的数字是 switch 语句中每个 case 分支所对应的字符串的哈希码。在 Java 中,当 switch 语句的条件表达式是字符串类型时,编译器会自动将其转换为哈希码,并在每个 case 分支中使用哈希码来进行比较,以提高代码执行的效率。
需要注意的是,当使用字符串作为 switch 语句的条件表达式时,编译器会自动为每个 case 分支生成对应字符串的哈希码,并将其存储在字节码中。这些哈希码是在编译期间计算的,因此不会对运行时的性能产生任何影响。如果在代码中修改了字符串的内容,其哈希码也会发生变化,因此建议在使用字符串作为 switch 语句的条件表达式时,尽可能避免修改字符串的内容。
public static void main(String[] args) {
switch ("sitech") {
case "paas":
System.out.println("paas");
break;
case "sitech":
System.out.println("sitech");
break;
default:
break;
}
}
// 编译后的代码
public static void main(String[] args)
{
String str;
switch ((str = "sitech").hashCode())
{
case -902089236:
if (str.equals("sitech")) {
break;
}
case 3432931:
if ((goto 78) && (str.equals("paas")))
{
System.out.println("paas");
return;
System.out.println("sitech");
}
break;
}
}