首頁  >  文章  >  Java  >  為什麼 -128 到 127 範圍之外的整數值在 Java 常數池中表現不同?

為什麼 -128 到 127 範圍之外的整數值在 Java 常數池中表現不同?

Barbara Streisand
Barbara Streisand原創
2024-11-07 04:16:03384瀏覽

Why Do Integer Values Outside the Range -128 to 127 Behave Differently in Java's Constant Pool?

為什麼整數常數池的行為在 127 之後有所不同

Java 中數字的常數池與字串的常數池不同。雖然只有編譯時常數保留在字串中,但任何裝箱操作都涉及整數包裝類型的池。

例如:

int x = 10;
int y = x + 1;
Integer z = y; // Not a compile-time constant
Integer constant = 11;
System.out.println(z == constant); // true

JLS 保證了小範圍的池值,實現可以選擇使用更大的範圍。

實際上,大多數實作使用Integer.valueOf 進行裝箱操作,導致以下行為:

Integer x = Integer.valueOf(100);
Integer y = Integer.valueOf(100);
System.out.println(x == y); // true

根據JLS 部分5.1.7:

-128 到127 之間的值在裝箱時將始終產生相同的參考。這是一個實際的折衷方案,可確保共同值始終無法區分。

但是,超出此範圍的值的行為會改變。出於效率原因,實作可能不會假設這些值的共用參考。

這可以確保在大多數情況下實現所需的行為,而不會顯著影響效能。記憶體限制的實作可以擴展快取以覆蓋更廣泛的值。

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

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