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

Java Object 類核心方法深度解析:equals、hashCode、toString 正確覆寫指南

     編輯:Java 相關知識

Object 類:所有類的始祖

java.lang.Object 是 Java 所有類的隱性父類。無 extends 子句時預設繼承 Object。所有陣列類型(含基本型別陣列)亦繼承 Object。

核心方法詳解

1. equals(Object obj) - 物件相等性判斷

public boolean equals(Object obj)
  • 預設比較記憶體位址(同 ==)
  • String、Date、包裝類等已覆寫為內容比較
  • 覆寫規約:自反性、對稱性、傳遞性、一致性、非空性

2. hashCode() - 雜湊碼獲取

  • 同一執行期間,同一物件多次呼叫必須返回相同值
  • equals 相等的兩物件,hashCode 必須相等
  • equals 不等的物件,hashCode 應盡量不等(提升 HashMap 效能)
  • 鐵律:覆寫 equals 必須同步覆寫 hashCode

3. toString() - 物件字串表示

public String toString()
  • 預設格式:類名@十六進制hashCode
  • 建議覆寫返回業務意義資訊(如 "User{id=1, name='張三'}")
  • 字串拼接、System.out.println 會自動呼叫

標準覆寫範例

public class User {
    private Long id;
    private String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return Objects.equals(id, user.id) && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}

比較運算子 vs equals

特性==equals()
基本型別比較值不適用
參考型別比較記憶體位址比較內容(視覆寫而定)
編譯檢查型別必須相容僅需為參考型別

最佳實踐

  • 使用 Objects.equals、Objects.hash 簡化實現(Java 7+)
  • IDE 自動生成後務必檢查業務邏輯完整性
  • 不可變類別適合緩存 hashCode 值
  • 集合元素、Map Key 必須正確實現雙方法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved