两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
   
网上答案:不对,其hashcode应当是相等。因为hashcode用的是同一个类的方法,同时其每一个属性值是相等的。我认为应该是对的,假设一个类C有a和b两个属性,该类的equals方法只需判断a属性是否相等,而hash code是由a和b一起计算得到的,这种情况下,就有可能出现两个对象相等,但hash code不等的情况了。不知道大家认为怎样?

解决方案 »

  1.   

    还有没有人讨论一下啊?今天搜了几篇文章看看,感觉确实应该是对的,equals和hashCode的实现应该一致,这只是一个“合约”而已。事实上不一定要这样做。想多听几个人的意见,一家面试我朋友的公司认为他答错了,却给不出理由。
      

  2.   

    当a.equals(b) is true时,a.hashcode == b.hashcode也应该是true,关于这个问题CSDN上的讨论贴已经多的快溢出了可以直接查阅过去的讨论贴,或者查阅《Effective Java》 or 《Thinking in java》中的相关章节的介绍11.9.3 散列法与散列码  《Thinking in java 3ed》中文版
    and
    《Effective Java》中文版 第三章,
    第七条:在改写equals的时候请遵守通用规约
    第八条:改写equals时,总要改写hashcode@.@||~
      

  3.   

    当然,如果一定要说是否可以在equals为true的状态下,使得hashcode为false,那当然可以做到。
    问题在于这是钻了问题的牛角尖(漏洞),问题可能问的是逻辑行为的正确性而不是物理行为。@.@||~
      

  4.   

    非常感谢midthinker(呵呵)的回答!