」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 Java 的整數常數池在 127 以上表現不同?

為什麼 Java 的整數常數池在 127 以上表現不同?

發佈於2024-12-22
瀏覽:344

Why Does Java's Integer Constant Pool Behave Differently Above 127?

問題:127處Java整數常數池行為的分歧

簡介:

The整數常數池是Java中的一種機制,可以優化常見整數值的快取以提高效能。然而,該池的行為在 127 時出現了變化,引起了開發人員的困惑。

理解行為:

對於從 -128 到 127 的整數,Java 保證引用相同常數的變數具有相同的引用。

Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); // True

這是因為這些值被緩存在常數池中。

分歧在128處:

但是當整數值超過127、行為改變。

Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1 == i2); // False

這是由於實作最佳化所致。雖然 JLS 保證快取最多 127 個值,但超出該範圍,實作可能會選擇以不同方式快取值,甚至根本不快取值。

其他注意事項:

甚至在保證範圍(-128 到 127)內,快取行為並不總是可靠。例如,使用 new Integer() 可以繞過常數池並建立新的參考。

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); // False

結論:

整數常數池在127 處的行為源自於實現最佳化與JLS 定義的保證範圍。開發人員應該意識到這種行為變化,以避免意外結果。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3