in Java 7 we have
o.hashCode();
Objects.hashCode(o);
Objects.hash(o);
The first 2 are roughly the same with the null point check, but what is last one?
When a single object reference is supplied, the returned value does not equal the hash code of that object reference.
Why is that? I mean, we don't need 3 methods that do the same thing, I understand that, but why do we need Objects.hash()
at all? When would you chose to use one vs another?
See the documentation for hashCode
and hash
. hash
takes Object...
while hashCode
takes Object
. The example given is:
@Override public int hashCode() {
return Objects.hash(x, y, z);
}
Objects.hash(Object... values)
should be used in cases when you want a hash of a sequence of objects, e.g. when defining your own hashCode
method and want a simply-coded hash for multiple values that make up the identity of your object.Objects.hashCode(Object o)
should be used when you want the hash of a single object, without throwing if the object is null.Object::hashCode()
should be used when you want the hash of a single object, and will throw an exception if the object is null.Note that hash(o)
and hashCode(o)
won't necessarily return the same thing! If you're doing it for a single object, you should probably use hashCode
.