java - 单例意味着哈希码总是返回相同的吗?

标签 java equals hashcode

我有两个对象,o1 和 o2 来自同一类。

如果o1.hashcode() == o2.hashcode(),我可以判断它们是同一个对象吗?

除了o1==o2之外,还有其他方式告诉单例吗?

最佳答案

如果您有该类的单个实例,则 ==equals 比较将始终返回 true

但是,不同对象的哈希码可以相等,因此仅通过具有相等的哈希码并不能保证相等。

Here是对 hashcodeequals 合约的很好的解释。

检查相等性并不足以确保您拥有单例,仅确保实例被视为相等。

如果您想要 Java 类的单个实例,最好使用静态成员和方法。

Here ,演示了几种单例方法。

编辑:正如埃默里所指出的 - 事实上,您可以覆盖 equals 以返回随机值,从而违反所需的自反性(x.equals(x) == true )。由于您无法覆盖 java 中的运算符,因此 == 是确定相同对象的唯一可靠方法。

关于java - 单例意味着哈希码总是返回相同的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987558/

相关文章:

java - 在 Java 中,比较对象和常量值时, "=="是装箱还是拆箱?

java - Java HashMap 内部数据结构在重新散列过程中如何变化?

java - Facebook JSON 区域设置

java - Java中如何重写equals方法

MySQL - NULL 安全不等于运算符

java - 如何组成String keys以获得最均匀的hash code分布

java - StackTraceElement 数组的哈希码每次返回不同的值

java - 对象到 ArrayList<String> 未经检查的转换

java - 将带有随机生成值的 csv 文件读取到 Java 中

java - 从非 ui 线程设置剪贴板