samuwoo
samuwoo
采纳率22.2%
2015-04-05 13:09 阅读 3.4k
已采纳

equals()和hashCode()方法被隐式调用时的约定

网上看到那么一个问题,百度了一下没有找到合适的答案。。。求大神解释下。。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    wojiushiwo945you 毕小宝 2015-04-06 02:29

    JDK源码的注释说明的很清楚,如果重写了equal方法,也应该重写hashCode方法。看看源码注释吧,是非常好的文档资料呢。
    *Note that it is generally necessary to override the hashCode
    * method whenever this method is overridden, so as to maintain the
    * general contract for the hashCode method, which states
    * that equal objects must have equal hash codes.

    点赞 1 评论 复制链接分享
  • danielinbiti danielinbiti 2015-04-05 13:44
    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-05 14:15

    简单来说一句话,HashCode相同未必相等,但是如果Hash不同,一定不相等。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-05 14:21

    不知道你听说过md5没有,它就是一种典型的hash算法。
    我们用它加密密码。
    用户输入密码,服务器转换为md5密文,和存在数据库中的比对,如果相同,就视作用户输入密码正确。
    很显然,这个过程中用户输入的密码如果正确,只能得到唯一的md5。
    但是理论上,用户输入一个错误的md5也可能因为算出的md5和预留的一致而被视作是正确的。这种情况称之为hash碰撞(也就是数据结构课程里说的hash冲突)

    对照“HashCode相同未必相等,但是如果Hash不同,一定不相等”这个原则,我们很容易理解这一点。

    点赞 1 评论 复制链接分享
  • feizaizheli9203 feizaizheli9203 2015-04-06 00:38

    hashcode其实是个每一个对象定义了一个散列值,从而保证每个对象都是唯一不同的

    点赞 评论 复制链接分享
  • u014698566 米大米 2016-02-29 03:12

    equals()方法与hashCode()方法的隐式调用时的约定是:
    1.如果两个对象相等(equals),那么他们必须拥有相同的哈希吗(hashCode)
    2.即使两个对象拥有相同的hashCode,他们也不一定相等.

    点赞 评论 复制链接分享

相关推荐