首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 關係運算符與物件比較陷阱:== vs equals() 深度解析

     編輯:Java 相關知識

基本關係運算符

產生 boolean 結果:<、>、<=、>=、==、!=。
==/!= 適用所有內建類型,其他比較不適用 boolean。

核心陷阱:== 比較的是「參考」而非「內容」

Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);  // false!比較的是記憶體地址
System.out.println(n1 != n2);  // true

正確比較內容:equals() 方法

System.out.println(n1.equals(n2)); // true!比較實際數值

自定義類別的 equals() 行為

class Value { int i; }
Value v1 = new Value(); v1.i = 100;
Value v2 = new Value(); v2.i = 100;
System.out.println(v1.equals(v2)); // false!預設比較參考

原因:Object.equals() 預設實現為 ==(比較參考)。
解決:在自定義類別中 覆寫 equals() 比較有意義的欄位(第 7 章詳述)。

Java 標準庫的處理

絕大多數標準類別(String、Integer、集合類等)已正確覆寫 equals(),比較的是內容而非參考。

最佳實踐

  • 基本類型:直接用 ==/!=
  • 物件比較內容:永遠用 equals()
  • 物件比較同一實例:用 ==
  • 自定義類別:必須覆寫 equals() 和 hashCode()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved