Skip to content
Site Stats
總訪問量–次
訪客數–人次

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❌✅比鍵值對內容(順序不重要)