理解Java 中整數裝箱的奇怪之處
在Java 中,像整數這樣的原始資料類型都有對應的包裝類,例如Integer,提供物件導向的功能。這些值的裝箱和拆箱方式可能會導致令人驚訝的結果。
這樣的觀察來自以下程式碼:
執行時,此程式碼將列印:
為什麼第一次比較回傳false,而第二次比較回傳true?根據 == 運算符,引用應該始終進行比較。
「真實」比較背後的奧秘
有趣的是,真正的比較並不是僥倖。 Java 語言規格(JLS) 第5.1.7 節規定:
如果裝箱的值p 是[...] -128 到127 之間的int 或短數字,[...] 那麼讓r1 和r2 是p 的任兩次裝箱轉換的結果。總是存在 r1 == r2 的情況。
在這種情況下,c 和 d 都將值保留在指定範圍內,導致它們的裝箱表示(整數物件)相同。
非固定範圍比較的歧義
相反,第一個比較(a == b) 不屬於保證相等規則。 JLS 強調這一點:
對於其他值,[規則]不允許程式設計師對裝箱值的身份進行任何假設。
本質上,當裝箱值超出固定範圍時,不保證相同
結論
Java 中整數裝箱的奇怪行為源於語言規範對效率和常見用例的規定。雖然一定範圍內的值保證被相同地裝箱,但對於其他值,裝箱物件的身份是不可預測的。這種理解闡明了開頭提供的程式碼片段所例證的「怪異」。
以上是為什麼 Java 中的整數裝箱對於'==”比較有時會返回'true”,有時會返回'false”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!