2009-09-29 92 views

回答

1

Equals方法將兩個對象(或作爲參數傳入的對象與調用該方法的對象)進行比較。

getHashCode返回一個對每個不同對象都唯一的代碼。

這些方法在每個對象中實現。要重寫這些方法,您將重新定義這些對象如何定義相等性。

要重寫一個類,您需要在具有相同簽名的子類中創建一個方法(有時候還有另一個關鍵字,例如'override',具體取決於語言)。

您可以使用基本方法,或完全定義一個新的方法。 如果您調用基本方法,則這必須是方法內的第一條語句。

0

覆蓋等於允許您定義對於您的對象類型而言,相等的語義是什麼,超出默認值「這些是相同的對象實例嗎?」 - 所以你可以定義兩個不同的對象,其內容是字符串「貓」是基本相同的。哈希代碼被用作等式的快速代理(兩個相同的對象必須具有相同的哈希代碼,儘管反過來顯然不成立)以插入散列表或類似的數據結構。

它只適用於基本上不可變的類型,以便一次完成的比較將保持爲真(考慮散列表用例)。

0

我會盡力解釋。 您正在編寫的類的基類已經提供了一個Equals和GetHashCode方法,並標記了這些方法,以便您可以根據需要提供自己的實現。

您可以通過編寫與基類中的方法具有相同簽名的方法來提供您自己的實現,並將它們標記爲基類中方法的「覆蓋」。

這告訴編譯器,無論何時有人調用Equals或GetHashCode,都希望使用實現而不是基類中提供的實現。大多數語言將允許您以某種方式調用基類的實現。這種方式可以構建邏輯回退到基本實現或使用基本實現作爲您自己實現的起點。

1

這兩種方法對於管理對象是必不可少的。 equals()用於比較兩個對象(不一定是相同類型,請介意),並且希望給出該對象的唯一數字表示形式。

在大多數面向對象的語言中,每個類都有這兩種方法的默認實現,這就是對於你的類不夠好。爲了使這些方法有用,有必要用有意義的代碼覆蓋這個默認實現。

這些方法在哪裏使用?假設你有一個對象散列表。在表格中插入一個新對象需要一個數字值用於初始索引搜索。這通常使用hashCode()方法提取,該方法最好給出一個不同的數字(如果散列表大小是素數,它也會有所幫助)。在表格中搜索某個項目需要將包含的項目與給定的樣本對象進行比較。這是通過equals()方法實現的,因此重要的是該方法檢查特定類的字段是否相等,而不僅僅檢查內存中的對象地址。