从 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
的文档和 hash
。 hash
接受 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/