以前一直記得重寫equals要把hashcode也要重寫了,但是一直也是沒有搞明白,
最近在看一些東西,覺得有必要記錄一下。
equals是object類的方法,
這個方法的作用是比較兩個物件是否相等的,可能有人會問了,使用==號不就可以比較了,為啥非得使用equals方法呢。
假設你有乙個student類,系統認為乙個學生的學號只要相同就預設為是同乙個學生,
public class student
如下:
student xiaoming=new student("110");
student xm=new student("110");
如果使用==判斷得到的結果肯定是false,因為這是兩個物件,位址肯定不相同。
如果重寫equals方法
public class student
}
然後使用equals方法比較(xiaoming.equals(xm))就可以得到true。
因為不重寫hashcode在使用hash集合(hashmap、hashtable、hashset)的時候會出現問題。
如果student類重寫了equals方法沒有重寫hashcode方法:
student xiaoming=new student("110");
student xm=new student("110");
hashmapmap=new hashmap();
map.put(xiaoming,"小明");
map.put(xm,"小明");
執行map.size() 我們想要得到的結果是:1,但是執行的結果是:2 ;
這是因為hashmap首先比較的是兩個物件的hashcode值,如果你沒有重寫student類的hashcode方法,預設是按照物件記憶體的位址進行雜湊運算得到的,這兩個物件的位址肯定不一樣,所以hashmap認為它不是同乙個物件,就放入了集合中。
我們新增hashcode方法的重寫:
public class student
@override
public int hashcode()
}
再次執行上面的**就得到的結果就是:1;說明已經認為這兩個物件是同乙個了。
大家用ide自動生成,盡量不要自己敲因為很有可能會出錯。
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類中是否有...
equals方法重寫
來自的文章 一 為什麼equals 方法要重寫?判斷兩個物件在邏輯上是否相等,如根據類的成員變數來判斷兩個類的例項是否相等,而繼承object中的equals方法只能判斷兩個引用變數是否是同乙個物件。這樣我們往往需要重寫equals 方法。我們向乙個沒有重複物件的集合中新增元素時,集合中存放的往往是...