Java 整數比較:什麼時候應該使用 `==` 和 `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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
