java.lang.Object 是 Java 所有類的隱性父類。無 extends 子句時預設繼承 Object。所有陣列類型(含基本型別陣列)亦繼承 Object。
public boolean equals(Object obj)
==)String、Date、包裝類等已覆寫為內容比較equals 相等的兩物件,hashCode 必須相等equals 不等的物件,hashCode 應盡量不等(提升 HashMap 效能)equals 必須同步覆寫 hashCodepublic 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 + "'}";
}
}
| 特性 | == | equals() |
|---|---|---|
| 基本型別 | 比較值 | 不適用 |
| 參考型別 | 比較記憶體位址 | 比較內容(視覆寫而定) |
| 編譯檢查 | 型別必須相容 | 僅需為參考型別 |
Objects.equals、Objects.hash 簡化實現(Java 7+)hashCode 值