开篇介绍
大家好,公众号【Java 极客思维】近期会整顿一些 Java 高频面试题分享给小伙伴,也心愿看到的小伙伴在找工作过程中可能用失去!本章节次要针对 Java 一些根底高频面试题进行分享。
Q1:
== 和 equals 的区别?
== 和 equals 的区别:
- equals 是办法,== 是运算符;
- 如果 == 比拟的是根本数据类型,则比拟两者数值是否相等,也就是咱们了解的等于符号;如果比拟的是援用数据类型,则比拟两者栈地址值是否相等;
- equals()用来比拟两个对象的【内容】是否统一。
- 如果 == 和 equals()都用来比拟对象时,若两个对象的援用地址统一时,equals 办法可能返回 true 或者 false,这次要取决于是否重写了 equals 办法,重写实现的形式是什么;而 == 则会返回 true。
Q2:
重写 equals()办法时,为什么必须要重写 hashCode 办法?
首先,hashCode()是获取到哈希码值,也称作散列码。然而实际上能够依据源码看到,其返回的是一个 int 类型的负数。
其中,哈希码的作用是用来确定该对象在哈希表中索引所在的地位。
能够从源码看到,Object 类中,定义了 hashCode()办法,这就示意 Java 中的所有类都蕴含有 hashCode()办法。
散列表存储的是键值对 (key-value) 模式,其特点是:能够依据键值 (key) 疾速检索到对应的值(value)
为什么肯定要有 hashCode?
这里用【HashSet 查看反复】为例来阐明为何肯定要有 hashCode
1. 对象退出 HashSet,HashSet 会先计算对象的 hashCode 值来判断对象所在的地位,共事也会和其余退出的对象的 hashCode 值进行比拟,如果没有雷同的 hashCode,则 HashSet 会认为没有反复的对象
2. 如果发现有 hashCode 统一的对象,此时会调用 equals()办法来查看 hashCode 相等的值是否内容真的统一;如果 equals()比拟的内容统一,则 HashSet 不会退出胜利;如果不统一,则会从新散列到其余的地位。
这样就缩小了 equals()办法调用次数,进步了执行效率。
hashCode() 和 equals() 办法相干规定:
1. 两个对象如果相等,那么 hashCode 肯定雷同
2. 两个对象如果相等,别离调用 equals() 办法都会返回 true
3. 两个对象如果有雷同的 hashCode 值,但也不肯定相等,还须要调用 equals()办法来比拟
4. 如果 equals()办法被笼罩,那么 hashCode()办法也肯定会被笼罩
5. hashCode()默认是在堆栈上的对象产生独特的哈希值。如果没有重写 hashCode(),那么两个对象无论如何都不会相等
后续会继续从 Java 根底开始,到框架的整体面试内容进行分享,长按二维码关注我吧~
祝大家都能拿到心仪的 offer!
点关注、不迷路
如果感觉文章不错,欢送 关注 、 点赞 、 珍藏,你们的反对是我创作的能源,感激大家。
如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。
如果你还想更加深刻的理解我,能够微信搜寻「Java 极客思维」进行关注。每天 8:00 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!