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。無論涉及的值如何,這都可以確保行為一致。其他資源
以上是Java 整數比較:什麼時候應該使用 `==` 和 `equals()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!