1. 程式人生 > 其它 >Java中switch是如何支援String的

Java中switch是如何支援String的

switch中為什麼支援String呢?

在Java 7中,switch開始了對String的支援,那麼switch是如何處理String字串的呢?

這裡直接上程式碼:

public class switchTest {
public static void main(String[] args) {
String name = "中國";
switch (name){
case "美國":
System.out.println("美國");
break;
case "英國":
System.out.println("英國");
break;
case "中國":
System.out.println("中國");
break;
default:
System.out.println("不合法");
}
//Java技術學習交流群:434587027
}
}

接下來我們通過 IDEA 來對這段程式碼進行反編譯

public static void main(String[] args) {
String name = "中國";
byte var3 = -1;
switch(name.hashCode()) {
case 642672:
if (name.equals("中國")) {
var3 = 0;
}
break;
case 1034543:
if (name.equals("美國")) {
var3 = 2;
}
break;
case 1061420:
if (name.equals("英國")) {
var3 = 1;
}
}

從反編譯出來的程式碼,我們可以清楚的看見,switch裡面的name變成了name.hashCode,最後編譯完還是去找的一個具體的字串,什麼是hashCode呢?每一個物件都有自己的一個hashCode,它是通過特定的演算法所生成的,而我們的中文,都會有所對應的hash值,為了防止hashCode值相同,所以用equals比較String是否相同。如果hashCode值相同,也可以通過臨時變數var3來賦一個新的值,進行case比較