Java 中整數相等之謎
隨著Java 在1.5 版本中引入自動裝箱,Integer 物件的使用可以與原始int互換。然而,據觀察,使用 == 比較 Integer 物件可能會導致意外結果。
在令人困惑的情況下,使用 == 比較 Integer 變數的程式碼被發現錯誤地將布林標誌設為 true當這些值實際上相等時。但是,將比較切換為 !cdiCt.equals(cdsCt) 解決了該問題。
這種異常行為是由 JVM 對整數值的快取機制所引起的。對於 -128 到 127 範圍內的值,JVM 會重複使用快取的實例,確保高效率的記憶體使用率。因此,無論其實際引用如何,此範圍內的整數都顯示為相同。
使用 == 比較 Integer 物件時,將檢查引用相等性而不是內容。因此,如果使用快取的實例,即使物件引用不同,比較也會傳回 true。
使用 equals() 方法時不會出現此問題,因為它比較物件的值,忽略參考。因此,建議使用 equals() 來比較 Integer 對象,特別是當值的範圍可能超出快取範圍或需要精確判斷相等時。
以上是為什麼Java中`==`有時無法正確比較`Integer`物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!