问题
Possible Duplicate:
what is an objects hashcode
How do hashCode() and identityHashCode() work at the back end?
I'm not talking about String class or any other class where the hashcode is overridden. Say if I just create a new object of the Object
class, then will the hashcode()
or to be true in any case, identityHashCode(Object x)
return the memory address of that object?
回答1:
Not necessarily. From the documentation (emphasis mine):
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
回答2:
You can always check by looking at the source that ships with your JDK.
My java.lang.Object
shows hashCode
as a native method. Here are the javadocs.
/**
* Returns a hash code value for the object. This method is
* supported for the benefit of hashtables such as those provided by
* <code>java.util.Hashtable</code>.
* <p>
* The general contract of <code>hashCode</code> is:
* <ul>
* <li>Whenever it is invoked on the same object more than once during
* an execution of a Java application, the <tt>hashCode</tt> method
* must consistently return the same integer, provided no information
* used in <tt>equals</tt> comparisons on the object is modified.
* This integer need not remain consistent from one execution of an
* application to another execution of the same application.
* <li>If two objects are equal according to the <tt>equals(Object)</tt>
* method, then calling the <code>hashCode</code> method on each of
* the two objects must produce the same integer result.
* <li>It is <em>not</em> required that if two objects are unequal
* according to the {@link java.lang.Object#equals(java.lang.Object)}
* method, then calling the <tt>hashCode</tt> method on each of the
* two objects must produce distinct integer results. However, the
* programmer should be aware that producing distinct integer results
* for unequal objects may improve the performance of hashtables.
* </ul>
* <p>
* As much as is reasonably practical, the hashCode method defined by
* class <tt>Object</tt> does return distinct integers for distinct
* objects. (This is typically implemented by converting the internal
* address of the object into an integer, but this implementation
* technique is not required by the
* Java<font size="-2"><sup>TM</sup></font> programming language.)
*
* @return a hash code value for this object.
* @see java.lang.Object#equals(java.lang.Object)
* @see java.util.Hashtable
*/
public native int hashCode();
回答3:
No, the HashCode() function returns an integer. If you have not defined a HashCode() function for your object, Java MAY transcode the memory address of the object to an integer and return that.
回答4:
As the documentation on Object.hashCode() states,
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
So, the Java language has no requirement for the hashcode of the Object class to return the memory address of the object and therefore you should not rely on this.
来源:https://stackoverflow.com/questions/10917731/does-hashcode-return-the-memory-address