首頁 > Java > java教程 > 為什麼 Java 中的整數裝箱對於'==”比較有時會返回'true”,有時會返回'false”?

為什麼 Java 中的整數裝箱對於'==”比較有時會返回'true”,有時會返回'false”?

Barbara Streisand
發布: 2024-12-23 00:50:14
原創
400 人瀏覽過

Why Does Integer Boxing in Java Sometimes Return `true` and Sometimes `false` for `==` Comparisons?

理解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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板