關鍵區別–在java中等於與哈希代碼
equals類似於==運算符,它用於測試對象標識而不是對象相等性。hashCode是一種方法,類通過該方法隱式或顯式地將存儲在類實例中的數據分解為單個哈希值,該散列值是一個32位有符號整數。在Java中,equals和hashCode之間的關鍵區別在於equals用於比較兩個對象,而hashCode用於散列,以決定對象應歸入哪個組。
目錄
1. 概述和主要區別
2. 在Java中什麼是相等的
3. 什麼是Java中的hashCode
4. 並排比較——用表格形式表示的Java中的equals與hashCode
5. 摘要
什麼是在java中等於(equals in java)?
equals方法用於比較兩個對象。默認的equals方法在對象類中定義。該實現類似於==運算符。兩個對象引用只有在指向同一對象時才相等。可以重寫equals方法。
聲明System.out.println(s1.equals(s2))將給出錯誤的答案,因為s1和s2指的是兩個不同的對象。與聲明相似,System.out.println(s1==s2);
聲明System.out.println(s1.equals(s3))將給出正確的答案,因為s1和s3引用的是同一個對象。與聲明相似,System.out.println(s1==s3);
學生班沒有平等的方法。因此,對象類中的equals被調用。只有當對象引用指向同一對象時,才會顯示True。
根據上述程序,將重寫equals方法。將一個對象傳遞給方法,並將其類型強制轉換為Student。然後,檢查id值。如果id值相似,則返回true。否則,它將返回false。s1和s2的id相似。所以,它會印出真的。s1和s3的id也很相似,因此它將打印為true。
什麼是java中的hashcode(hashcode in java)?
哈希代碼用於散列,以決定對象應歸入哪個組。一組對象可以共享相同的哈希代碼。正確的哈希函數可以將對象均勻地分佈到不同的組中。
正確的哈希代碼可以具有如下屬性。假設有兩個對象obj1和obj2。如果obj1.equals(obj2)為真,那麼obj1.hashCode()等於obj2.hashCode()。如果obj1.equals(obj2)為false,則不必obj1.hashCode()不等於obj2.hashCode()。兩個不相等的對象也可能具有相同的哈希代碼。
Student類包含equals和hashCode方法。Student類中的equals方法將接收一個對象。如果對象為null,則返回false。如果對象的類不相同,則返回false。在兩個對象中都會檢查id值。如果它們相似,則返回true。否則將返回false。
在主程序中,創建對象s1和s2。當調用s1.equals(s2)時,將給出true,因為equals方法被重寫,它檢查兩個對象的id值。即使它們引用的是兩個對象,但答案是正確的,因為s1和s2的id值是相同的。由於s1.equals(s2)為真,s1和s2的hashCode應該相等。打印s1和s2的hashCode得到相同的值。hashCode方法可用於HashMap等集合。
等於(equals)和java中的hashcode(hashcode in java)的區別
等於Java中的hashCode | |
equals是Java中的一個方法,它的作用類似於==運算符,後者用於測試對象標識而不是對象相等性。 | hashCode是一種方法,類通過該方法隱式或顯式地將存儲在類實例中的數據分解為單個哈希值。 |
使用 | |
equals方法用於比較兩個對象。 | 該方法用於散列,以確定應將對象放入哪個組中。 |
總結 - 等於(equals) vs. java中的hashcode(hashcode in java)
在Java中equals和hashCode的區別在於,equals用於比較兩個對象,而hashCode用於散列,以決定對象應歸入哪個組。