首頁 >Java >java教程 >為什麼 Java 的整數常數池在 127 以上表現不同?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-10 13:45:03582瀏覽

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

問題: Java 整數常量池行為在127 時的分歧

簡介:

整數常數池是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

結論:

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

以上是為什麼 Java 的整數常數池在 127 以上表現不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn