//重寫
@override
public boolean equals(object o)
if (o == null || this.getclass() != o.getclass())
user user = (user) o;
return objects.equals(id, user.id) &&
objects.equals(username, user.username) &&
objects.equals(age, user.age);
}@override
public int hashcode()
假設有兩個物件:
user user = new user();
user.setid(1);
user user1 = new user();
user1.setid(1);
重寫了equals和hashcode
system.out.println(user.equals(user1));//true
system.out.println(user.hashcode() == user1.hashcode());//true
反之只重寫equals:
//true
//false
也就是說 hashcode相當於我們的身份證號,兩個物件相等,hashcode一定相等;hashcode不等,兩個物件一定不等。
現在,再加一行** user1=user;
//true
//true
說明hashcode代表了指標/記憶體位址。
最後,提出關鍵性的疑問,什麼時候我會用到hashcode呢,hashcode不相等關我什麼事呢,我只用到equals判斷滿足我的要求了不就行了?
試試map.put(user,***);// map key唯一性
mapmap = new hashmap<>();
map.put(user,1);
map.put(user1,2);
system.out.println(map);
重寫hashcode輸出:
=2}不重寫hashcode輸出:
=2, user=1}
為什麼重寫equals一定要重寫hashcode?
link1,link2,link3,link4,link5,link6 主要是為了提公升雜湊表的效能。因為hashmap 集合類使用了 hashcode 方法來計算物件在雜湊表中應該儲存的位置,如果不重寫hashcode值一樣的物件。因為new出來的物件即使值相同,儲存位址必不相同。不重寫 hash...
IDEA 重寫equals重寫toString
重寫equals方法 idea中直接輸入eq回車進入重寫方法 第二步如果obj這個物件連學生 student 這個型別都不是,那麼肯定返回false if obj instanceof student 第三步如果是學生型別,強制把obj轉換成學生物件,不轉換預設是objeke student s s...
重寫equals方法
對於重寫equals方法有以下例子 object類中的常用方法。object類是所有類的根類,定義了所有物件都具備的功能。api 應用程式介面 文件 class person extends object 判斷是否是同齡人。這個方法也是在比較兩個person物件是否相等。注意 person類中是否有...