發現個有趣的
阿新 • • 發佈:2017-05-23
als integer true color log 結果 pub new span
1 Integer i5 = 127;//編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127); 2 Integer i6 = 127; 3 System.out.println(i5 == i6); 4 5 Integer i5 = 128; 6 Integer i6 = 128; 7 System.out.println(i5 == i6);
第一個輸出true,而第二個是false.神奇吧。
下面來看看源碼
public static Integer valueOf(int i) { assert IntegerCache.high >= 127;if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
對於-128到127之間的數,會對其進行緩存,Integer i5 = 127時,會將127進行緩存,下次再申明Integer i6 = 127時,
就會直接從緩存中取,而不會new了。所以結果為true,而第二個則為false。
發現個有趣的