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