java Object中hashCode的实现是什么?

时间:2012-11-28 10:05:52

标签: java java-7 hashcode

  

可能重复:
  How is hashCode() calculated in Java

我发现Java中的根类hashCode()的{​​{1}}方法中没有实现:

Object

如果我有public native int hashCode(); Object a,如何在不使用Object b的情况下了解a.hashCode()b.hashCode()值?仅通过System.out.println()实施。

我尝试hashCode两个new个对象,令我惊讶的是ArrayList值相同:两者都是1.

3 个答案:

答案 0 :(得分:17)

hashCodenative方法,这意味着在内部调用系统库。有关详细信息,请参阅Java Native Interface

关于SO Why hashCode() and getClass() are native methods?有一个问题可能对你很有意思。

答案 1 :(得分:5)

默认的hashCode将是特定于实现的。我怀疑它与内存地址有关,但请注意VM在内存中移动对象(当然,hashCode必须保持不变)。所以它不会是实际的内存地址。

答案 2 :(得分:3)

默认hashcode()实现经常但并不总是在对象的内存地址上松散地提供一个整数,但是内存地址可以改变。这可能会因JVM实施而松散地发生变化。

  

hashCode()方法

     

如您所知,此方法提供了对象的has代码。基本上   派生的hashCode()的默认实现是派生的   通过将内存地址映射到整数值。如果看看   在Object类的源代码中,您将找到以下代码   哈希码。

     

public native int hashCode();

     

它表明hashCode是提供的本机实现   内存地址在一定程度上。但是有可能   覆盖实现类中的hashCode方法。

http://www.javaworld.com/community/node/1006