equals与hashCode的关系探究
equals与hashCode的关系:
1.equals 判断是否为同一个对象 hashCode判断是否为同一类 大部分类在重写equals方法时会重写hashCode方法
2.如果两个对象相同 (equals方法返回true)那么他们的hashCode值一定相同
3.如果两个对象不同(equals方法返回false)那么他们的hashCode值可能相同,可能不同
4.如果两个对象hashCode值相同(存在哈希冲突),他们可能相同可能不同(equals方法可能返回true,可能返回false)
5.如果两个对象hashCode值不同,那么他们两个肯定不同(equals=false)
为了直观地感受这一关系,代码创建了两个字符串对象:
String a = "ok";
String b = new String("ok");
System.out.println(a == b);
System.out.println(a.hashCode());
System.out.println(b.hashCode());
这里 a==b 返回的是false,因为”==”,比较的是引用地址,a是字符串常量池中的引用,b是通过new关键字在堆中的创建的对象,然而它们的hashCode值是相同的,这印证了“如果两个对象相同(equals方法返回true)那么他们的hashCode值一定相同,因为字符串类重写了equals和hashCode方法,保证了内容相同的字符串hashCode一致