Ricky的面试比惨俱乐部 EP2 hashCode()
Object若不重写hashCode()的话,hashCode()如何计算出来的?
好的回答结束。
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
咳咳,我们来深究一下~
话不多说,先上源码——
* @return a hash code value for this object. public native int hashCode();
额,emmmm就没了,咋就返回了个内存地址呢,咋就调用了C或C++实现的呢?
关键在于这个native
关键字:
当出现这个关键字的时候,意味着这个方法是在外部定义的,native意味着本地,即调用了本地的C或C++库,譬如hashCode()就是找到本地库中C实现的hashCode方法,去返回这个object的内存地址,而这个过程是的桥梁是JNI(Java Native Interface),他提供了互操作的API。
JNI调用C的流程图 https://www.cnblogs.com/KingIceMou/p/7239668.html
这就是为了跨平台,而对底层控制做出的牺牲。