Java中的整數緩存最近,我看到了一個演示文稿,其中有以下Java代碼示例:Integer a = 1000, b = 1000; System.out.println(a == b); // false Integer c = 100, d = 100; System.out.println(c == d); // true現在我有點糊涂了。我理解為什么在第一種情況下,結果是“false”-這是因為Integer是一種引用類型,而“a”和“b”的引用是不同的。但為什么在第二種情況下,結果是“真實的”呢?我聽說過一種觀點,JVM為int值緩存對象從-128到127,以便進行一些優化。這樣,“c”和“d”的引用是相同的。有人能給我更多關于這種行為的信息嗎?我想了解這個優化的目的。在什么樣的情況下性能得到提高等。對這一問題的一些研究將有很大的參考價值。
3 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
我想了解這個優化的目的。在什么樣的情況下性能得到提高等。對這一問題的一些研究將有很大的參考價值。
Integer
Integer
Integer.valueOf()
Integer

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
Integer.valueOf(int)
Integer
256
.
-128
+127

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
你似乎對什么是“實例”有嚴重的誤解。根本不可能有兩個不同的值“屬于同一個Integer實例”。對象實例基本上是一個內存區域。您可以有多個具有相同值的不同實例,但不能相反。緩存將為不同的值返回不同的實例;它只是確保始終獲得相同值的相同實例。
添加回答
舉報
0/150
提交
取消