我发现Java中的根类hashCode()
的{{1}}方法中没有实现:
Object
如果我有public native int hashCode();
和Object a
,如何在不使用Object b
的情况下了解a.hashCode()
和b.hashCode()
值?仅通过System.out.println()
实施。
我尝试hashCode
两个new
个对象,令我惊讶的是ArrayList
值相同:两者都是1.
答案 0 :(得分:17)
hashCode
是native
方法,这意味着在内部调用系统库。有关详细信息,请参阅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方法。