主要从 hashCode()的用途,equals()的用途,hashCode(),equals()约定来回答:
hashCode()方法的主要用途是获取哈希码,equals()主要用来比较两个对象是否相等。
两者之间有约定:① 如果两个对象相等,那么他们必须有相同的哈希码
② 但两个对象的哈希码相等,那么他们的对象不一定相等
③ 也就是说,equals()比较两个对象相等时,两个对象的hashCode()一定相等
④ 两个对象的hashCode()相等时,equals()比较的两个对象不一定相等
加分回答:① Object类提供的equals()方法,默认是比较对象的内存地址是否相等。而实际业务中,通常是比较两个对象的内容是否相等,所以需要对equals()方法进行重写。
② 由于hashCode()和equals()具有联动关系,所有equals()方法重写时,通常也要将hashCode()方法重写,使得两个方法始终满足约定。
之所以有规定,是为了使HashMap这样的哈希表正常使用
保证是同一个对象。如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。