所有
我已经定义了我的类,并且还要覆盖equals()和hashCode()方法。但我不知道具体应该为我自己的课程实现这些方法。任何人都可以对自定义类的这些方法的实现有所了解吗?
答案 0 :(得分:9)
您说您已经知道哪个自定义类需要覆盖hashCode / equals?然后您还知道哪些属性(全局变量)确定每个类的相等性。
当您了解这些属性时,您可以手动或通过使用现代IDE(如Eclipse,NetBeans等)生成方法来实现hashCode / equals。在Eclipse中,有一个名为“Generate hashCode()和equals()”的选项。 “来源”菜单
答案 1 :(得分:3)
对于equals,答案取决于您的业务需求,即对象等于什么意味着什么。
hashCode()应始终为对象返回唯一值,除非该对象等于另一个对象。它应该取决于对象属性的值。
答案 2 :(得分:2)
答案 3 :(得分:2)
基本上,如果要将对象存储在集合中(Map,Set,List),那么必须根据文档中定义的合同实现equals和hashCode方法。
否则,许多集合实现将不具有预期的行为。有关实现线索,请阅读equals和hashcode的Object Javadoc。
答案 4 :(得分:1)
阅读java.lang.Object
中两种方法的API文档。它完全描述了非常覆盖实现应该如何表现。
答案 5 :(得分:1)
实现equals()时,请确保理解相等和身份之间的区别。 两个对象实例可能“相等”但可能不相同。 a.equals(b)是对等式的测试,您的业务规则应该定义。 ==是对象标识的测试(同一对象实例)