equals和hashcode方法
2019-12-04 本文已影响0人
紫色红色黑色
描述
equals和hashCode方法都是Object中的方法。本文解释equals()作用,hashCode()作用
解释
Object中equals()是比较两个对象的地址是否相等。hashCode()是本地方法,是以内存地址映射后生成的值。没有重写这两个方法,那在比较对象相等或者散列映射中都是用内存地址作为判断依据。但大量情况下我们要用的不是内存地址,而是对象内部数据。
重写equals和hashCode后可以用对象内部数据作为判断依据。例如String
类中,equals中会判断char[]中的数据是否相等,hashCode中会以char[]中数据来生成hashCode值。这样以来,只要char[]相等就生成相等的hashCode,equals也相等。
HashMap中是以key的hashCode定位slot,定位到后再通过equals判断value是否存在。这样只要String中的char[]数据不变,则hashCode不变,equals结果不变。
代码
public static void main(String[] args) {
HashMap<Object, Object> map = new HashMap<>(10);
Bank b1 = new Bank("lucy");
Bank b2 = new Bank("lucy");
map.put(b1, "b1");
System.out.println(b1.hashCode());//1831932724
System.out.println(b2.hashCode());//1747585824
System.out.println(map.get(b1));//b1
System.out.println(map.get(b2));//null
String l1 = new String("lucy");
String l2 = new String("lucy");
map.put(l1, "l1");
System.out.println(l1.hashCode());//3333055
System.out.println(l2.hashCode());//3333055
System.out.println(map.get(l1));//l1
System.out.println(map.get(l2));//l1
}