起因
面试时面试官问我hashMap的get方法底层原理,我的回答是:根据传入的key,做hash取余运算定位到具体的一个桶位置,之后再遍历链表或者红黑树,比较key值是否一样。这里面试官就直接问我,那么他比较key的时候,是比较key里面的值还是比较key的引用。我没能答上来。
源码分析
572行:get()方法底层,先比较了引用地址是否一样,如果引用地址不一样的情况下,再调用equals方法
148行:而object类调用equals方法时,首先会看具体的实现类有没有覆盖equals方法,如果没有覆盖则使用默认的equals方法比较引用地址。如果覆盖了则要看具体类里面equals方法的实现逻辑。
总结
所以我觉得比较好的回答是:key首先肯定会比较应用地址是否一样,不一样的情况下,会调用euqals方法比较,具体比较的是什么,要看具体的实现类。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。