如果我重载 equals,我还应该覆盖 java 中的 haschode 吗?
If I overload equals should I still override haschode in java?
我知道每次覆盖 equals 时我也应该覆盖 hasCode 但是重载呢?我还应该覆盖 hashCode 吗?
旁注:在发布问题之前,我已经读到我应该首先避免重载 equals 但我仍然想知道如果我选择重载它应该怎么做。
基于哈希的集合永远不会使用您重载的 equals() 方法。这是你的方法,你决定它应该做什么。因此,合同完全属于您。
但我会重复您在问题中所说的话:您首先不应重载 equals()。如果这样做,您至少应该使其与实际的 equals(Object) 方法一致,以避免大多数混淆。并且由于它应该与equals()保持一致,这意味着您需要覆盖equals(Object),从而也覆盖hashCode()。
我知道每次覆盖 equals 时我也应该覆盖 hasCode 但是重载呢?我还应该覆盖 hashCode 吗?
旁注:在发布问题之前,我已经读到我应该首先避免重载 equals 但我仍然想知道如果我选择重载它应该怎么做。
基于哈希的集合永远不会使用您重载的 equals() 方法。这是你的方法,你决定它应该做什么。因此,合同完全属于您。
但我会重复您在问题中所说的话:您首先不应重载 equals()。如果这样做,您至少应该使其与实际的 equals(Object) 方法一致,以避免大多数混淆。并且由于它应该与equals()保持一致,这意味着您需要覆盖equals(Object),从而也覆盖hashCode()。