1)"当覆盖equals()时,通常要覆盖hashCode()"什么意思?但我覆盖hashCode()时,不覆盖equals()程序照常运行,此又怎么解释?2).如果不显式调用hashCode(),是不是当使用到有查询意图(如put(),get(),containsKey() etc.)的方法时才会自动调用它?(像toString()一样转换要输出的String对象.) 

解决方案 »

  1.   

    equals 与 hashCode 没有直接联系。不过通常很多类的实现中,在 equals 里都是判断的 hashCode 是否想同。hashCode 肯定都是调用的。就算是在 put, get, containtsKey 等里面调用,那也是调用的。
      

  2.   

    先谢所有回应者!现在我觉得 equals()应该是:你想怎样具体使用判断条件,就要覆盖,否则不用(其它内置的已经可以解决相当的条件吧).而当要存储/查找时,先hashCode(),然后调用equals()判断散列码是否一样.再作相应方法处理.用最简单的方法做最复杂的事情.