1. 程式人生 > >java中switch的一些蹊蹺

java中switch的一些蹊蹺

我們都知道,在Java7之前,switch語句括號中的資料型別只能是 char/int/char,不能是String;但是在Java7中支援了這個。原理是計算String的hashcode來代替。但是這樣做會有hash碰撞。所以有一下實驗:

code:

private void cool(String s) {
		switch (s) {
		case "a":
			break;
		default:
			break;
		}
	}

反編譯程式碼:

  private void cool(String s)
  {
    String str;
    switch ((str = s).hashCode())
    {
    case 97: 
      if (str.equals("a")) {
        break;
      }
    }
  }

問題:為什麼反編譯程式碼中要重新宣告一個String str?

這個問題沒搞清楚,請諸位指教。