亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中的整數緩存

Java中的整數緩存

慕桂英546537 2019-07-15 16:09:08
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實例的范圍為-128到127,以及所有自動裝箱、文字和使用Integer.valueOf()將從該緩存返回它所涵蓋的范圍的實例。

這是基于這樣的假設,即這些小值比其他int發生的頻率高得多,因此避免為每個實例設置不同對象的開銷是有意義的(Integer對象占用大約12個字節)。


查看完整回答
反對 回復 2019-07-15
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

的實現Integer.valueOf(int)..它將返回相同的Integer對象的輸入小于256.

編輯:

實際上-128+127默認情況下,如下所示。


查看完整回答
反對 回復 2019-07-15
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

你似乎對什么是“實例”有嚴重的誤解。根本不可能有兩個不同的值“屬于同一個Integer實例”。對象實例基本上是一個內存區域。您可以有多個具有相同值的不同實例,但不能相反。緩存將為不同的值返回不同的實例;它只是確保始終獲得相同值的相同實例。

查看完整回答
反對 回復 2019-07-15
  • 3 回答
  • 0 關注
  • 788 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號