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

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

Barbara Streisand
Barbara Streisand原創
2024-12-26 18:03:11459瀏覽

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

Java 中的整數比較難題:== 與equals()

在Java 1.5 及更高版本中,整數可以被視為原始int在許多場景中的值。然而,最近的一個程式碼問題引發了關於使用 == 運算子進行整數比較的有效性的問題。

問題陳述

考慮以下程式碼片段:

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

當cdiCt 和cdsCt 的值相等時,此程式碼似乎將不符設定為true。在檢查布林表達式時,問題變得很明顯:當值確實相等時,它的計算結果為 false,但當繼續執行時,不知何故,不匹配仍然設為 true。

解決這個問題的方法是使用equals() 方法相反:

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

說明說明

== 運算子比較兩個物件的記憶體引用,而equals()方法比較它們的值。對於像 int 這樣的基本類型, == 運算子按預期工作。但是,對於像 Integer 這樣的對象,== 運算子僅檢查引用是否指向相同的快取值。

出於效能原因,JVM 快取 -128 到 127 之間的 Integer 值。因此,當使用 == 比較兩個整數時,只有當兩個值都在此範圍內時,該運算子才會傳回 true。在給定的場景中,這些值可能超出此範圍,從而導致意外行為。

結論

雖然使用 == 比較基元是可以接受的,但它建議使用 equals() 方法來比較包裝對象,例如 Integer。無論涉及的值如何,這都可以確保行為一致。

其他資源

  • [不可變物件/包裝類別快取](https://docs.oracle.com/en/java/javase/11 /docs/api/jav a.base/java/lang/Integer.html#Immutable_Objects_.2F_Wrapper_Class_Caching)
  • [為什麼可以編譯器/JVM不只是讓自動裝箱“只是工作”? ](https://stackoverflow.com/questions/12595136/why-cant-the-compiler-jvm-just-make-autoboxing-just-work)

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

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