为什么hashCode()和getClass()是原生方法?
我检查了类的源代码,我发现该方法声明是Object
getClass()
public final native Class<?> getClass();
而宣言是hashCode()
public native int hashCode();
为什么这两个方法方法在类中,我如何获取这些方法的源代码?native
我检查了类的源代码,我发现该方法声明是Object
getClass()
public final native Class<?> getClass();
而宣言是hashCode()
public native int hashCode();
为什么这两个方法方法在类中,我如何获取这些方法的源代码?native
对象类的源代码可以在这里找到
此源代码包含 getClass() 方法的实现(请参见第 58 行)。hashCode 被定义为函数指针JVM_IHashCode(参见第 43 行)。
JVM_IHashCode在 jvm.cpp 中定义。请参阅从第 504 行开始的代码。这反过来调用 ObjectSynchronizer::FastHashCode,它是在 syncer.cpp 中定义的。请参阅 FastHashCode 在第 576 行的实现和第 530 行get_next_hash。
可能,这些方法对于性能来说是原生的,并且由于实际问题而无法实现。
例如,对于来自javadocs,hashCode通常是“通过将对象的内部地址转换为整数”来实现的。此内部地址无法通过 java sdk 获得,必须作为本机方法实现。
请阅读是否可以找到 Java 本机方法的源代码?。另请阅读此博客文章Object.hashCode实现。它提供了更多详细信息。但是错误地断言哈希码不是从对象的身份生成的。
希望它有帮助。