7

Java面试专题-基础篇(1)

 3 years ago
source link: https://segmentfault.com/a/1190000038359984
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

AziUBz.jpg!mobile

开篇介绍

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK