起因

面试时面试官问我hashMap的get办法底层原理,我的答复是:依据传入的key,做hash取余运算定位到具体的一个桶地位,之后再遍历链表或者红黑树,比拟key值是否一样。这里面试官就间接问我,那么他比拟key的时候,是比拟key外面的值还是比拟key的援用。我没能答上来。

源码剖析


572行:get()办法底层,先比拟了援用地址是否一样,如果援用地址不一样的状况下,再调用equals办法

148行:而object类调用equals办法时,首先会看具体的实现类有没有笼罩equals办法,如果没有笼罩则应用默认的equals办法比拟援用地址。如果笼罩了则要看具体类外面equals办法的实现逻辑。

总结

所以我感觉比拟好的答复是:key首先必定会比拟利用地址是否一样,不一样的状况下,会调用euqals办法比拟,具体比拟的是什么,要看具体的实现类。