問題: 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中文網其他相關文章!