【发布时间】:2011-04-24 13:49:56
【问题描述】:
全部,
我已经定义了我的类以及覆盖equals() 和hashCode() 方法的类。但我不知道应该为我自己的类具体实现这些方法。任何人都可以对自定义类的这些方法的实现有所了解吗?
【问题讨论】:
-
这实际上取决于您如何定义平等。通常需要考虑所有或几乎所有属性,有时只需要一个/几个,有时(例如考虑线程),您在 equals() 方法中想要的只是比较身份。
标签: java
全部,
我已经定义了我的类以及覆盖equals() 和hashCode() 方法的类。但我不知道应该为我自己的类具体实现这些方法。任何人都可以对自定义类的这些方法的实现有所了解吗?
【问题讨论】:
标签: java
【讨论】:
对于 equals,答案取决于您的业务需求是什么,即对象相等意味着什么。
hashCode() 应该始终为一个对象返回一个唯一值,除非该对象等于另一个对象。它应该取决于对象的属性值。
【讨论】:
equals 相同的属性。
【讨论】:
String 作为键并使用字符串、equals() 和 hashCode()实现已经正确定义。
阅读java.lang.Object中两种方法的API文档。它非常准确地描述了重写实现应该如何表现。
【讨论】:
在实现 equals() 时,请确保您了解相等和身份之间的区别。 两个对象实例可能“相等”但可能不相同。 a.equals(b) 是对相等性的测试,您的业务规则应该定义它。 == 是对对象身份的测试(相同的对象实例)
【讨论】:
您说您已经知道您的哪个自定义类需要覆盖 hashCode/equals?然后您还知道哪些属性(全局变量)决定了每个类的相等性。
当您知道这些属性后,您可以手动实现 hashCode/equals,也可以使用现代 IDE(如 Eclipse、NetBeans 等)生成方法。在 Eclipse 中有一个名为“Generate hashCode() and equals()”的选项“来源”菜单
【讨论】: