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

  • 相关阅读:
    mac上eclipse上运行word count
    利用hadoop自带程序运行wordcount
    mac上eclipse上配置hadoop
    在mac上安装hadoop伪分布式
    0到N数其中三个数的全排列
    【设计模式】【应用】使用模板方法设计模式、策略模式 处理DAO中的增删改查
    【设计模式】【行为型模式】策略模式
    【设计模式】【行为型模式】模板模式
    properties文件操作
    File相关操作
  • 原文地址:https://www.cnblogs.com/xgx120413/p/14076621.html
Copyright © 2020-2023  润新知