首頁 > Java > java教程 > 為什麼Java中`==`有時無法正確比較`Integer`物件?

為什麼Java中`==`有時無法正確比較`Integer`物件?

Barbara Streisand
發布: 2025-01-02 20:13:39
原創
469 人瀏覽過

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Java 中整數相等之謎

隨著Java 在1.5 版本中引入自動裝箱,Integer 物件的使用可以與原始int互換。然而,據觀察,使用 == 比較 Integer 物件可能會導致意外結果。

在令人困惑的情況下,使用 == 比較 Integer 變數的程式碼被發現錯誤地將布林標誌設為 true當這些值實際上相等時。但是,將比較切換為 !cdiCt.equals(cdsCt) 解決了該問題。

這種異常行為是由 JVM 對整數值的快取機制所引起的。對於 -128 到 127 範圍內的值,JVM 會重複使用快取的實例,確保高效率的記憶體使用率。因此,無論其實際引用如何,此範圍內的整數都顯示為相同。

使用 == 比較 Integer 物件時,將檢查引用相等性而不是內容。因此,如果使用快取的實例,即使物件引用不同,比較也會傳回 true。

使用 equals() 方法時不會出現此問題,因為它比較物件的值,忽略參考。因此,建議使用 equals() 來比較 Integer 對象,特別是當值的範圍可能超出快取範圍或需要精確判斷相等時。

以上是為什麼Java中`==`有時無法正確比較`Integer`物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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