HashSet hs=new HashSet();
Person p1=new Person("a1",1);
hs.add(p1);
System.out.println(p1);
重写了hashcode
public int hashCode()
{
System.out.println("hashcode////");
return name.hashCode()+age;
}
执行结果:
hashcode////
hashcode////
bean.Person@bf1
为什么输出p1却调用了hashcode?
而且还调用了两次,这是什么意思?
hs.add(p1);
调用这一行,会调用hashCode,为什么调用2次,这个要看HashSet它内部怎么实现的。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
System.out.println(p1);这句代码会默认调用该对象的toString方法,当你没有重写toString方法的时候,就会调用上面我贴出来的
这个默认的toString方法,可以很明显的看到,他又调用了hashCode方法,所以就出现了你见到的情况了