为什么说:“如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。 ”?

解决方案 »

  1.   

    请注意,他说的是“必须”,而不是“必定”也就是说,你在写自己的class的时候“应该”遵守"a.equals(b)" <=> "a.hashCode() == b.hashCode()"
      

  2.   

    为什么equals与hasecode存在这样的关系呢?
      

  3.   

    Hashtable和HashMap等使用hashCode作为key值参考,所以相等的对象(equals(Object))须有相同hashCode
      

  4.   

    这是一个规范,因为在HashMap等常用数据结构,算法中hashCode会被用于寻找存放位置,而equals用于判断两者是否相同。显然你不能造成放在同一位置的Key不相同,或者不相同的两个Key放在一个位置,或者不同位置的Key相同,或者相同的Key位置不相同。
      

  5.   

    上面
    "a.equals(b)" <=> "a.hashCode() == b.hashCode()"
    说错了,应该是
    "a.equals(b)" => "a.hashCode() == b.hashCode()"单向的,hashCode相同不能保证equals
      

  6.   

    对,API经常出现
    at the option of the implementation
    就是说sun/jcp只给出了框架,并给出实现的建议以及最好的(也就是SUN的JDK实现的形式),但是,究竟实现成什么样就是由实现者决定了,只要逻辑正确就OK,使用的时候需要参照API