看教程说Hashtable中hashCode的方法是把对象在内存中的地址运算后得到的,但是为什么我定义了两个对象后,得到的两个对象的hashCode相等?
Person p1=new Person("lisi",1);
Person p2=new Person("lisi",1);
p1.hashCode()==p2.hashCode()//这里是相等的,

解决方案 »

  1.   

    看看你的Person类 应该已经重写过hashcode方法了
      

  2.   

    哦,对了,我那个Person类真的是重写了hashCode方法了。
    可是下面这样写为什么s1和s2的hashCode相等?String s1=new String("abc");
    String s2=new String("abc");
    if(s1.hashCode()==s2.hashCode())
    {
    System.out.println("OK");
    }
      

  3.   

    Hashtable中hashCode的代码
    public synchronized int hashCode() {
    int i = 0;
    if (count == 0 || loadFactor < 0.0F)
        return i;
    loadFactor = -loadFactor;
    Entry[] entrys = table;
    for (int i_13_ = 0; i_13_ < entrys.length; i_13_++) {
        for (Entry entry = entrys[i_13_]; entry != null;
     entry = entry.next)
    i += entry.key.hashCode() ^ entry.value.hashCode();
    }
    loadFactor = -loadFactor;
    return i;
        }
      

  4.   

    String类应该也已经重写过hashcode方法了 并且保证只要string的equels方法是相等的 hashcode方法也是相等的