代码如下
代码结束
其执行结果如下
in MyObj::hashCode()
in MyObj::hashCode()
in MyObj::equals(Object o)
in MyObj::hashCode()
in MyObj::equals(Object o)
1
分析HashSet的执行代码
HashSet.class
HashMap.class
看第八行代码
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
首先对e计算hashCode,
如果hash值不一样, 那么认为两个对象不相同
如果hash值一样, 那么再去检查是不是地址一样, 或者equals()返回值一样
因此, 如果没有重定义hashCode(), 那么缺省的hashCode()对于new出来的两个不同对象产生的hash值肯定是不一样的; 由此自定义对象定义的equals()就根本不会被调用到。