开篇介绍

大家好,公众号【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准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!