我有两个对象,o1 和 o2 来自同一类。
如果o1.hashcode() == o2.hashcode()
,我可以判断它们是同一个对象吗?
除了o1==o2
之外,还有其他方式告诉单例吗?
最佳答案
如果您有该类的单个实例,则 ==
和 equals
比较将始终返回 true
。
但是,不同对象的哈希码
可以相等,因此仅通过具有相等的哈希码并不能保证相等。
Here是对 hashcode
和 equals
合约的很好的解释。
检查相等性并不足以确保您拥有单例,仅确保实例被视为相等。
如果您想要 Java 类的单个实例,最好使用静态成员和方法。
Here ,演示了几种单例方法。
编辑:正如埃默里所指出的 - 事实上,您可以覆盖 equals
以返回随机值,从而违反所需的自反性(x.equals(x) == true
)。由于您无法覆盖 java 中的运算符,因此 ==
是确定相同对象的唯一可靠方法。
关于java - 单例意味着哈希码总是返回相同的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987558/