请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashCode()?

主要从 hashCode()的用途,equals()的用途,hashCode(),equals()约定来回答:

hashCode()方法的主要用途是获取哈希码,equals()主要用来比较两个对象是否相等

两者之间有约定:① 如果两个对象相等,那么他们必须有相同的哈希码

                             ② 但两个对象的哈希码相等,那么他们的对象不一定相等

                             ③ 也就是说,equals()比较两个对象相等时,两个对象的hashCode()一定相等

                             ④ 两个对象的hashCode()相等时,equals()比较的两个对象不一定相等

加分回答:① Object类提供的equals()方法,默认是比较对象的内存地址是否相等。而实际业务中,通常是比较两个对象的内容是否相等,所以需要对equals()方法进行重写。

                  ② 由于hashCode()和equals()具有联动关系,所有equals()方法重写时,通常也要将hashCode()方法重写,使得两个方法始终满足约定。

之所以有规定,是为了使HashMap这样的哈希表正常使用

保证是同一个对象。如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。

你可能感兴趣的:(java,开发语言)