两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
网上答案:不对,其hashcode应当是相等。因为hashcode用的是同一个类的方法,同时其每一个属性值是相等的。我认为应该是对的,假设一个类C有a和b两个属性,该类的equals方法只需判断a属性是否相等,而hash code是由a和b一起计算得到的,这种情况下,就有可能出现两个对象相等,但hash code不等的情况了。不知道大家认为怎样?
网上答案:不对,其hashcode应当是相等。因为hashcode用的是同一个类的方法,同时其每一个属性值是相等的。我认为应该是对的,假设一个类C有a和b两个属性,该类的equals方法只需判断a属性是否相等,而hash code是由a和b一起计算得到的,这种情况下,就有可能出现两个对象相等,但hash code不等的情况了。不知道大家认为怎样?
and
《Effective Java》中文版 第三章,
第七条:在改写equals的时候请遵守通用规约
第八条:改写equals时,总要改写hashcode@.@||~
问题在于这是钻了问题的牛角尖(漏洞),问题可能问的是逻辑行为的正确性而不是物理行为。@.@||~