从 Java 7 开始,我们有
o.hashCode();
Objects.hashCode(o);
Objects.hash(o);
前两个与空检查大致相同,但最后一个是什么?
当提供单个对象引用时,返回值不会
不等于该对象引用的哈希码。
这是为什么?我的意思是,我们不需要三个做同样事情的方法,我理解这一点,但为什么我们需要Objects.hash()
根本吗?您什么时候会选择使用其中一种而不是另一种?
请参阅文档hashCode http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#hashCode%28java.lang.Object%29 and hash http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#hash%28java.lang.Object...%29. hash
takes Object...
while hashCode
takes Object
。给出的例子是:
@Override public int hashCode() {
return Objects.hash(x, y, z);
}
-
Objects.hash(Object... values)
应该在您想要对象序列的哈希值的情况下使用,例如当定义你自己的hashCode
方法并需要一个简单编码的哈希值来表示构成对象身份的多个值。
-
Objects.hashCode(Object o)
当您想要单个对象的哈希值时应该使用,如果对象为空则不抛出异常。
-
Object::hashCode()
当您想要单个对象的哈希值时应该使用,并且如果该对象为空,则会抛出异常。
注意hash(o)
and hashCode(o)
不一定会返回相同的东西!如果您要为单个对象执行此操作,您可能应该使用hashCode
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)