equals方法和hashCode方法

2021-10-06 00:00:45 字數 1397 閱讀 9360

package com.study.a_object;

public class person

public person(int id, string name, int age)

public int getid()

public void setid(int id)

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

@override

public string tostring()

/** 1.判斷比較的兩個物件不是同乙個物件

* 保留原本的this == obj,滿足條件直接判斷為true

* 2.資料型別不一致

* 資料型別必須是一致的情況下才可以進行比較!!!如果equals

* 傳入的資料型別不是當前呼叫方法的對應資料型別,沒有必要進行比較

* 3.判斷【自定義比較】內容

* id name age 完全一致,兩個物件相同

*/@override

public boolean equals(object obj)

/** 資料型別一致

* 需要判斷傳入的引數型別是否為person型別,如果不是直接返回false

* * 使用乙個關鍵字 isntanceof

* 類物件 instanceof 型別

* 判斷物件是不是當前指定型別

*/if (false == obj instanceof person)

/** 按照自定義方式

* 比較物件中儲存的資料內容

* * 我們認為

* person型別中我們認為 id name age 一致才認為是兩個相同的物件

*///完成強制轉換操作,object型別轉換成當前使用的person型別操作

person p = (person) obj;

return this.id == p.id

&& this.age == p.age

/** this.name.equals這裡執行的是string類equals方法

* 這裡呼叫方法是需要明確方法的呼叫者是誰

* * 這裡equals方法是按照字串比較方式完成的

*/&& this.name.equals(p.name);

} @override

public int hashcode() }

package com.study.a_object;

public class demo2

}``

如何正確的覆蓋equals和hashCode

public boolean equals object obj public native int hashcode public string tostring protected native object clone throws clonenotsupportedexception pro...

重寫equals為啥需要重寫hashCode

以前一直記得重寫equals要把hashcode也要重寫了,但是一直也是沒有搞明白,最近在看一些東西,覺得有必要記錄一下。equals是object類的方法,這個方法的作用是比較兩個物件是否相等的,可能有人會問了,使用 號不就可以比較了,為啥非得使用equals方法呢。假設你有乙個student類,...

重寫equals時還必須重寫hashCode方法

1.public boolean equals object obj 和 hashcode 方法是object物件中的方法 2.equals 與 hashcode間的關係是這樣的 a.如果兩個物件相同 即用equals比較返回true,那麼它們的 hashcode 值一定要相同 b.如果兩個物件的 ...