Java String hashCode of null string
Solution 1
As others have noted hashCode
is a method on Object
and is non-static because it inherently relies (i.e. belongs to) an object/instance.
Note that Java 7 introduced the Objects
class, which has the hashCode(Object)
method, which does exactly what you want: return o.hashCode()
if o
is non-null or 0
otherwise.
This class also has other methods that deal with possibly-null
values, such as equals(Object, Object)
, toString(Object)
and a few others.
Solution 2
because if it was static "1".hashCode()
and "2".hashCode()
would have returned the same value, which is obviously wrong.
It is specific per instance, and influenced by it, therefore it cannot be static.
Solution 3
hashCode
is used to get the hashCode of an object, in order to know in which bucket of a HashMap
this object must be placed. It thus has to be an instance method of the object, and it must be called polymorphically.
null
can be used as a key in a HashMap, but it's treated as a special case.
You seem to be using hashCode for a different purpose, so you have to handle is in a specific way.
Solution 4
Because the hash code of a String is a property of that String.
With the same train of thought you could make every method static.
Solution 5
Its returning hashCode of an Object
not an class.
user710818
Updated on June 29, 2022Comments
-
user710818 almost 2 years
Only interesting, why method hashCode() in java.lang.String is not static? And in case of null return e.g. -1 ? Because frequently need do somethihg like:
String s; ............. if (s==null) { return 0;} else { return s.hashCode(); }
Thanks.
-
bernard paulus over 10 yearsWrong: if a static
hashCode(String)
was provided along the non-static String.hashCode(), it could be called like thisString.hashCode("1")
, or, if you ignore the warning,"2".hashCode("1")
. Both calls would return the same value. -
amit over 10 years@bernardpaulus But the questions is not about
hashCode(String)
, it's abouthashCode()
(unparametrized). -
bernard paulus over 10 yearsa no-parameter static
String.hashCode()
does not make much sense (should not even compile as it cannot override Object.hashCode() ). Plus thefoo()
notation is often used to indicate thatfoo
is a function, without specifying the parameters. -
Helen Cui almost 4 years" return o.hashCode() if o is non-null or 0 otherwise." How can you call hashCode() on a null and get 0?
-
Joachim Sauer almost 4 years@HelenCui: you can't call
hashCode
onnull
, obviously. That's why you call the static method on the class calledObjects
and pass the possibly-null value in:int hash = Objects.hashCode(aVariableThatMightBeNull)
. If the variable was null thenhash
will be0
, otherwise it will be the value returned by itshashCode()
method.