Java 各種資料型別的相等比較方法總整理
int 與 Integer 的比較方式
為什麼不能都用 ==
?
因為原始型別(如 int)和包裝類別(如 Integer)在比較時,==
行為不同,容易出現預期外結果或 NullPointerException。
原始型別(int、double...):
直接用 ==
,因為比較的是值本身。
java
int a = 5;
int b = 5;
System.out.println(a == b); // true
這樣寫可以避免物件參考問題,單純比數值。
包裝類別(Integer、Double...):
建議使用 .equals()
,避免被自動拆箱或 null 搞出例外。
java
Integer a = 5;
Integer b = 5;
System.out.println(a.equals(b)); // true
這樣寫可以避免 null 造成的例外,也能正確比較內容。
陣列內容如何正確比較
常見錯誤原因:
陣列用 ==
或 .equals()
比較時,比的是記憶體位置,不是內容!
❌ 錯誤方式:
java
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false(不同物件)
System.out.println(a.equals(b)); // false(等同於 ==)
這樣寫會得到 false,因為是比物件參考。
正確方式:使用 Arrays.equals()
java
import java.util.Arrays;
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); // true
這樣寫可以正確比對陣列內容,避免誤判。
Map、List、Set 的相等判斷
常見錯誤原因:
直接用 ==
只會比參考位置,內容一樣也會判斷為不相等。
Map 用 .equals()
比較內容即可
java
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map1 = new HashMap<>();
map1.put("apple", 1);
map1.put("banana", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("banana", 2);
map2.put("apple", 1);
System.out.println(map1.equals(map2)); // true,內容相同
這樣寫可以正確比對所有鍵值對,順序不同也沒關係。
注意:Java 的 Map
.equals()
是比對所有鍵值對是否一致,不在意順序。
常見錯誤與正確寫法對照
- 陣列、物件、集合類型不要用
==
,要用.equals()
或對應工具方法。 - 包裝型別(如 Integer)避免直接用
==
,以免遇到 null 或自動拆箱問題。
快速總結表格
類型 | 用 == | 用 .equals() | 其他工具 |
---|---|---|---|
數字(int) | ✅ | ❌(不適用) | |
包裝數字 | ❌(小心 null) | ✅ | |
字串 | ❌ | ✅ | |
陣列 | ❌ | ❌ | Arrays.equals() ✅ |
List/Set | ❌ | ✅ | List.equals() 比內容 |
Map | ❌ | ✅ | 比鍵值對內容(順序不重要) |