如果我重载equals,我还应该重写java中的haschode吗?

如果我重载equals,我还应该重写java中的haschode吗?,java,overriding,overloading,equals,hashcode,Java,Overriding,Overloading,Equals,Hashcode,我知道每次重写equals时我也应该重写hasCode,但是重载呢?我还应该重写哈希代码吗 旁注:在发布问题之前,我已经读到我应该首先避免重载equals,但我仍然想知道如果我选择重载它该怎么办。任何基于哈希的集合都不会使用重载的equals()方法。这是你的方法,你决定它应该做什么。因此,合同完全是你的 但我要重复你在问题中所说的:首先,你不应该重载equals()。如果您这样做了,您至少应该使它与实际的equals(Object)方法一致,以避免大多数混淆。由于它应该与equals()一致,

我知道每次重写equals时我也应该重写hasCode,但是重载呢?我还应该重写哈希代码吗


旁注:在发布问题之前,我已经读到我应该首先避免重载equals,但我仍然想知道如果我选择重载它该怎么办。

任何基于哈希的集合都不会使用重载的equals()方法。这是你的方法,你决定它应该做什么。因此,合同完全是你的


但我要重复你在问题中所说的:首先,你不应该重载equals()。如果您这样做了,您至少应该使它与实际的equals(Object)方法一致,以避免大多数混淆。由于它应该与equals()一致,这意味着您需要重写equals(Object),因此也需要重写hashCode()。

任何基于哈希的集合都不会使用重载的equals()方法。这是你的方法,你决定它应该做什么。因此,合同完全是你的


但我要重复你在问题中所说的:首先,你不应该重载equals()。如果您这样做了,您至少应该使它与实际的equals(Object)方法一致,以避免大多数混淆。由于它应该与equals()一致,这意味着您需要重写equals(Object),因此也需要重写hashCode()。

重载
equals
?你是说超控吗?您的用例是什么?如果你重载了它,那么它有一个非常不同的含义(即你的重载方法不再覆盖
对象。equals
,另请参见)。误读了问题,抱歉,重新打开,因为那是错误的副本。@Tunaki我确实打算重载equals,我知道它定义了一个新方法,但仍然,我不知道我是否应该重写hashCode:我认为,因为我正在创建一个新的equals,理论上我会一直使用它,而不是Object中的equals,我还必须重新定义一个新的hashCode。您的链接很好地解释了为什么不重载equals,以及何时重载可能失败(对于集合),因此感谢+1重载
equals
?你是说超控吗?您的用例是什么?如果你重载了它,那么它有一个非常不同的含义(即你的重载方法不再覆盖
对象。equals
,另请参见)。误读了问题,抱歉,重新打开,因为那是错误的副本。@Tunaki我确实打算重载equals,我知道它定义了一个新方法,但仍然,我不知道我是否应该重写hashCode:我认为,因为我正在创建一个新的equals,理论上我会一直使用它,而不是Object中的equals,我还必须重新定义一个新的hashCode。您的链接很好地解释了为什么不重载equals,以及重载何时可能失败(对于集合),因此感谢+1