等於(equals)和java中的hashcode(hashcode in java)的區別

equals類似於==運算子,它用於測試物件標識而不是物件相等性。hashCode是一種方法,類透過該方法隱式或顯式地將儲存在類例項中的資料分解為單個雜湊值,該雜湊值是一個32位有符號整數。在Java中,equals和hashCode之間的關鍵區別在於equals用於比較兩個物件,而hashCode用於雜湊,以決定物件應歸入哪個組。...

關鍵區別–在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方法。

等於(equals)和java中的hashcode(hashcode in java)的區別

圖01:Java程序與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)和java中的hashcode(hashcode in java)的區別

圖02:重寫equals的Java程序

根據上述程序,將重寫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()。兩個不相等的對象也可能具有相同的哈希代碼。

等於(equals)和java中的hashcode(hashcode in java)的區別

圖03:帶有equals和hashCode的Student類

等於(equals)和java中的hashcode(hashcode in java)的區別

圖04:主程序

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用於散列,以決定對象應歸入哪個組。

引用
  • 發表於 2020-10-19 00:40
  • 閱讀 ( 52 )
  • 分類:科技

你可能感興趣的文章

扔(throw)和丟擲java(throws in java)的區別

...記小於50,將導致異常並顯示“失敗”。如果標記大於或等於50,它將列印訊息“透過”。 什麼是丟擲java(throws in java)? throws關鍵字用於宣告異常。後面是異常類名。e、 g.–丟擲異常。程式設計師可以使用throws關鍵字宣告多個異...

  • 發佈於 2020-09-21 19:02
  • 閲讀 ( 52 )

字串緩衝區(string stringbuffer)和java中的stringbuilder(stringbuilder in java)的區別

關鍵區別–java中的string與stringbuffer與stringbuilder String、StringBuffer和stringbuilder是Java中的類。字串在Java程式設計中被廣泛使用。一旦建立了字串物件,就不可能更改它們。每次字串發生更改時,它都會建立一個新字串。即使是...

  • 發佈於 2020-10-02 19:22
  • 閲讀 ( 45 )

包裹(package)和java介面(interface in java)的區別

Java中的Package和Interface的主要區別在於,Package有助於對類進行有條理的分類以方便訪問和維護,而Interface則有助於實現多個繼承和實現抽象。 Java是最流行的程式語言之一。Java的主要優點是它支援面向物件程式設計。這種方...

  • 發佈於 2020-10-18 11:01
  • 閲讀 ( 50 )

睡覺(sleep)和在java中等待(wait in java)的區別

關鍵區別——java中的休眠與等待 Sleep和wait是Java中用於多執行緒處理的兩種方法。sleep方法屬於Thread類,而wait方法來自Object類。Java中sleep和wait的關鍵區別在於,sleep用於在指定的毫秒數內暫停當前執行緒的執行,而wait方法用...

  • 發佈於 2020-10-19 03:04
  • 閲讀 ( 47 )

打破(break)和在java中繼續(continue in java)的區別

關鍵區別——java中的break與continue 在程式設計中,有時需要多次重複一個語句或一組語句。迴圈用於對同一組指令進行多次迭代。迴圈的一些例子是while迴圈、do while迴圈和for迴圈。在while迴圈中,首先計算測試表達式。如果...

  • 發佈於 2020-10-19 05:44
  • 閲讀 ( 61 )

包裝類(wrapper class)和java中的基元型別(primitive type in java)的區別

關鍵區別——java中的包裝類與原語型別 Java是一種流行的程式語言,用於開發各種應用程式。Java的一個優點是它支援面向物件程式設計(OOP)。使用OOP,可以使用物件對程式或軟體進行建模。類被用作建立物件的藍圖。有必...

  • 發佈於 2020-10-19 06:27
  • 閲讀 ( 89 )

靜止的(static)和java期末考試(final in java)的區別

關鍵區別——java中的靜態與最終版本 每種程式語言都有特定的語法。程式設計師在編寫程式時應該遵循這些語法。程式設計語言的關鍵字根據任務的不同具有特定的含義。它們由程式語言提供,不能用於使用者定義的變數、...

  • 發佈於 2020-10-19 07:48
  • 閲讀 ( 53 )

選中的(checked)和java中的未檢查異常(unchecked exception in java)的區別

關鍵區別——java中的檢查異常與未檢查異常 異常是執行時錯誤。有兩種型別的異常稱為檢查異常和未檢查異常。當發生選中的異常時,Java應用程式連線到外部資源,如檔案、裝置或資料庫。這些異常由編譯器檢查。檢查的...

  • 發佈於 2020-10-19 08:38
  • 閲讀 ( 60 )

變數(variables)和java中的資料字面值(data literals in java)的區別

關鍵區別——java中的變數與資料文字 計算機程式是執行一項任務的一組指令。程式設計時需要儲存資料。因此,這些資料被儲存在儲存器中。這些保留的記憶體位置稱為變數。變數應該有唯一的名稱,因為它們應該易於識別...

  • 發佈於 2020-10-19 08:52
  • 閲讀 ( 48 )

路徑(path)和類路徑(classpath)的區別

...將此呼叫作為Java作業系統的引用。因此,根據環境變數中的值,作業系統將呼叫Java編譯器和工具。因此,程式設計師應該設定path變數。安裝Java之後,C驅動器的程式檔案中有一個名為Java的資料夾。在這個資料夾中,有一個名為...

  • 發佈於 2020-10-19 11:04
  • 閲讀 ( 48 )
sorrybat
sorrybat

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦