Integer與int的種種比較你知道多少?

Integer i5 = 127;//java在編譯的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);
 Integer i6 = 127;
 System.out.println(i5 == i6);//true
 Integer i5 = 128;
 Integer i6 = 128;
 System.out.println(i5 == i6);//false

前者結果爲true,然後者則爲false,不少人都不動爲何。其實java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);因此關鍵就是看valueOf()函數了。只要看看valueOf()函數的源碼就會明白了。JDK源碼的valueOf函數式這樣的:java

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了。緩存

相關文章
相關標籤/搜索