首頁 >Java >java教程 >Java 整數比較:什麼時候應該使用 == 與 equals()?

Java 整數比較:什麼時候應該使用 == 與 equals()?

DDD
DDD原創
2024-12-21 06:41:10295瀏覽

Java Integer Comparison: When Should You Use == vs. equals()?

Java 中的整數相等:解開== 與equals 的困境

Java 在1.5 版本中引入了自動裝箱功能,可以方便地互換原語int 等類型及其對應的包裝類別(例如Integer)。然而,最近的一項觀察提出了關於使用 == 比較整數值的有效性的問題。

考慮以下程式碼:

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null & cdiCt != cdsCt)
    mismatch = true;

令人驚訝的是,此程式碼有時會將不符合設定為即使 cdiCt 和 cdsCt 的值相等也是如此。在 Eclipse 中使用斷點發現兩個 Integer 值都等於 137,但條件式的計算結果為 false。

將條件更改為使用 equals() 代替:

if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))

解決了問題。這就提出了一個問題:是否仍不建議使用 == 來比較兩個 Integer 值?

答案在於 Java 虛擬機器 (JVM) 對 Integer 值的快取。為了提高效能,JVM 快取 -128 到 127 之間的整數值。這意味著,當您使用 == 比較此範圍內的兩個整數值時,只有當它們引用相同的快取實例時,它們才會相等。

但是,如果值超出此範圍或未自動裝箱,它們將被視為不同的物件。這可能會導致意外的行為,如提供的範例所示。

因此,通常不建議依賴 == 來比較 Integer 值,特別是當它們可能超出快取範圍或精確度至關重要時。相反,使用 equals() 是確保可靠的相等比較的更安全方法。

以上是Java 整數比較:什麼時候應該使用 == 與 equals()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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