1. 程式人生 > >JDK7新特性學習之 --- switch的表達式

JDK7新特性學習之 --- switch的表達式

bre image http 例如 style 之前 字符 深入理解 編譯錯誤

  JDK7之前,switch中表達式只能是char、byte、short、int及其對應的包裝類和枚舉類型。JDK7之後java中新增加了String類型作為switch的表達式之一。

  但是在使用String類型作為表達式的時候,case語句有可能會出現重復的情況,例如字符串和其對應的Unicode轉義字符,字面上是兩個不同的字符串,但是在編譯的時候,表示的都是一樣的,所以會造成編譯錯誤。

  例如:

/**
 * 會出現編譯錯誤
  */
public class Test{
    public String generate(String gender) {
        String str 
= ""; switch(gender) { case "男": break; case "\u7537": break; } return str; } }  

   ==》  技術分享  技術分享

  那麽為什麽會出現這種情況?

  ==》 因為在java中編譯的時候使用的是字符串的 hashcode 作為switch語句的表達式,而case語句中的兩個字符串的 hashcode 是完全一樣的,所以才會報錯。

  ==》 當然,因為 hashcode 也有可能會重復,所以底層還是使用String的 equals 方法比較兩個字符串。

(參考學習自 《深入理解Java7核心技術與最佳實踐》)

JDK7新特性學習之 --- switch的表達式