1. 程式人生 > >發現個有趣的

發現個有趣的

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。

發現個有趣的