乐趣区

关于java:Java面试专题基础篇1

开篇介绍

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

退出移动版