Skip to content
本站總訪問量
本站訪客數 人次

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/SetList.equals() 比內容
Map比鍵值對內容(順序不重要)

Contributors

The avatar of contributor named as lucashsu95 lucashsu95

Changelog