hashcode - Objects.hash() 与 Objects.hashCode(),需要澄清

标签 hashcode java-7

从 Java 7 开始,我们有了

o.hashCode();
Objects.hashCode(o);
Objects.hash(o);

前两个与空检查大致相同,但最后一个是什么?

When a single object reference is supplied, the returned value does not equal the hash code of that object reference.

这是为什么呢?我的意思是,我们不需要三个方法来做同样的事情,我明白,但是为什么我们需要 Objects.hash() 呢?您什么时候会选择使用其中一种而不是另一种?

最佳答案

请参阅 hashCode 的文档和 hashhash 接受 Object...,而 hashCode 接受 Object。给出的例子是:

@Override public int hashCode() {
    return Objects.hash(x, y, z);
}
  • Objects.hash(Object...values) 应该在您需要对象序列的哈希值(例如当定义您自己的 hashCode 方法并希望为构成对象身份的多个值提供简单编码的哈希时。
  • Objects.hashCode(Object o) 应该在您想要单个对象的哈希值时使用,如果对象为 null,则不抛出异常。
  • Object::hashCode() 应该在您需要单个对象的哈希值时使用,如果对象为 null,则会抛出异常。

请注意,hash(o)hashCode(o) 不一定返回相同的内容!如果您要为单个对象执行此操作,则可能应该使用 hashCode

关于hashcode - Objects.hash() 与 Objects.hashCode(),需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11597386/

相关文章:

java - 如果将常量返回给 hashcode 并将 false 返回给 equals 会发生什么

java - 我应该如何为 Java 中的循环链表定义一个好的 hashCode?

Java并发从多个线程写入单个文本文件?

java - 属性(property)的动机是什么?

java - 如何调试在 Java 7 下工作但在 Java 8 下不工作的东西

java - 如何在 Java 中对 Map<String, List<String>> 类型的映射进行排序

java - 来自反射的哈希码?

java - hashCode() 没有 equals()?

javascript - 打印出哈希值?

java - 多线程应用程序中的可选调试输出——我的意思是*针对客户端*,而不是为了找出死锁或错误