35 c c++ java methods hashcode
我检查的源代码Object级的,我发现其中的方法声明getClass()为
public final native Class<?> getClass();
Run Code Online (Sandbox Code Playgroud)
而声明hashCode()是
public native int hashCode();
Run Code Online (Sandbox Code Playgroud)
为什么这两个方法native在类中有哪些方法?如何获取这些方法的源代码?
kri*_*arp 36
可以在此处找到Object类的源代码
该源包含getClass()方法的实现(参见第58行).hashCode被定义为函数指针JVM_IHashCode(参见第43行).
JVM_IHashCode在jvm.cpp中定义.请参阅从第504行开始的代码.这又调用了在synchronizer.cpp中定义的ObjectSynchronizer :: FastHashCode .请参阅第576行的FastHashCode和第530行的get_next_hash的实现.
可能这些方法本质上是针对性能的,并且由于实际上存在实际问题.
例如,从javadocs开始,hashCode通常"通过将对象的内部地址转换为整数"来实现.此内部地址不能通过java sdk获得,必须作为本机方法实现.
请阅读是否可以找到Java本机方法的源代码?.另请阅读此博客文章Object.hashCode实现.它提供了更多细节.但是做出了错误的断言,即hashCode不是从对象的身份生成的.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
12200 次 |
| 最近记录: |