在equal的实现中使用hashcode()

One*_*ree 0 java

我可以使用实现hashCode()来实现我equals()的Java吗?或者这是一种不好的做法?

例如.,

public int hashCode()
{
    // some computation based on the internal states
}

public equals(Object o) 
{
     return o instanceof ThisClass ? hashCode() == o.hashCode() : false;
}
Run Code Online (Sandbox Code Playgroud)

jny*_*len 7

这是不好的做法.仅仅因为hashCodes相等并不意味着对象是平等的.

如果成员比较太贵,那么您可以使用hashCode初始检查来告诉您对象是否相等.如果hashCodes匹配,你仍然需要进行成员比较.

  • 换句话说,你可以使用`hashCode`作为你的`equals`方法中的第一个检查,如果它们的哈希码不相同则返回false,但如果哈希码相等,你仍然需要进行其他检查. (2认同)