一、问题
在我们新建java对象的时候,如果后期用到对象比较,就必须重写equals(0、hashcode()方法
为什么必须重写这两个方法?
只是比较相等的话,重写equals()方法不就可以吗?为什么还要重写hashcode()方法?
参考文章:【http://blog.****.net/zhangqindabendan/article/details/54800303】
二、分析
(1)必须重写【equals()】的原因:
Object类比较对象相等的原理是:
【比较相等的两方指向同一对象】
【对于任何非空引用值 x 和 y ,当且仅当 x 和 y 引用同一对象(同一块内存地址),此方法才返回 true】
实际比较相等时:
【我们认为保存数据相同的对象就相等,不关心是否同一内存地址】
【new出来的对象内存地址永远不相同】
(2)必须重写【hashcode()】的原因:
hashcode()方法的常规协定:该协定声明相等的对象必须具有相等的哈希码
【当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true】
【当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false】
没有重写该方法的后果:
【某些利用对象hashcode值做为索引的情况下,会造成混乱,相当于没有重写equals方法】
(3)equals()方法重写规定:
【自反性、对称性、传递性、一致性】
相关文章
- hashCode和equals方法的联系
- java哪些类重写了equals_重写java类的equals和hashCode方法
- Java中重写了equals和toString方法的类有哪些
- java重写equals方法和hashCode方法
- 重写实体类的equals和hashcode方法来判断对象唯一
- java中如何重写hashCode和equals方法
- java 重写hashcode_Java重写hashCode的原则及方法
- JavaBean关于为什么要重写hashCode方法和equals方法及如何重写
- 使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()
- 重写 equals 时没有重写 hashCode 方法的话,使用 HashMap 可能会出现什么问题