开篇介绍

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

Java面试专题-基础篇(1)的更多相关文章

  1. Java面试准备基础篇_11.24

    Java类加载机制 Java内存模型JMM 为什么 Redis 单线程能支撑高并发? 高并发下的接口幂等性解决方案! 面试官问:平常你是怎么对 Java 服务进行调优的? JAVA虚拟机(JVM)六: ...

  2. Java面试之基础篇(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系?        hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hash ...

  3. Java面试之基础篇(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,”xyz”对应一个对象,这个对 ...

  4. Java面试之基础篇(2)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  5. Java面试之基础篇(1)

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  6. Java面试总结-基础篇2

    1. mvn的dependency-management dependency-management是声明依赖,不实际引入,主要用于在父依赖中统一各依赖的版本,否则,各个子模块在引用同一依赖时,难免会 ...

  7. Java面试总结-基础篇1

    java多线程-- 自旋锁,偏向锁 好处:可以举Servlet和CGI的对比用户线程和守护线程的区别:用户线程结束后JVM会退出,然后守护线程才会终止(比如垃圾回收线程),如何在java中创建守护线程 ...

  8. Java面试专题-集合篇(2)

  9. Java面试专题-多线程篇(2)- 锁和线程池

随机推荐

  1. 【Jmeter】Jmeter安装配置教程

    jmeter安装配置教程 1.安装jdk,配置环境变量 进入官网,https://www.oracle.com/downloads/index.html#java,选择 Java (JDK) for ...

  2. Java中的(String args[])

    1. DOS下运行 首先,String args[] 这个形式可以直接看出它就是一个字符串数组充当main函数形式参数,args是arguments的缩写,不是关键字(就是一个数组名),可以改但没必要 ...

  3. 致萌新与不会用 NOI Linux 的 OIer

    全文绝大部分转载自:这篇好文章啊. 目录 1:GUIDE 2:Gedit 原文 打开 编译运行 3.Vim 3-1:这东西咋开啊 3-2:这东西咋用啊 4.编译与运行 5.调试 6.CSP竞赛中编写代 ...

  4. Liquibase+SpringBoot的简单使用笔记!update+rollback

    该笔记记录了springboot整合liquibase之后,如何根据liquibase ChangeLogFile对数据库进行修改以及回滚操作 参考: baeldung.com JHipster 1. ...

  5. Ethernaut靶场练习(0-5)

    1.Hello Ethernaut 目标: 安装好metamask,熟悉操作命令. 操作过程: 我们先提交一个实例,然后打开游览器F12.然后跟他的提示走. 先输入contract.info(). c ...

  6. rabbitmq(一)-基础入门

    原文地址:https://www.jianshu.com/p/e186a7fce8cc 在学东西之前,我们先有一个方法论,知道如何学习.学习一个东西一般都遵循以下几个环节: xxx是什么,诞生的原因, ...

  7. 配置交换机Trunk接口流量本地优先转发(集群/堆叠)

    组网图形 Eth-Trunk接口流量本地优先转发简介 在设备集群/堆叠情况下,为了保证流量的可靠传输,流量的出接口设置为Eth-Trunk接口.那么Eth-Trunk接口中必定存在跨框成员口.当集群/ ...

  8. /etc/resolv.conf文件自动恢复的解决方法

    /etc/resolv.conf文件自动恢复的解决方法: service NetworkManager stop #后台进程关闭 chkconfig NetworkManager off #配置关闭, ...

  9. dp背包 面试题 08.11. 硬币

    https://leetcode-cn.com/problems/coin-lcci/ 硬币.给定数量不限的硬币,币值为25分.10分.5分和1分,编写代码计算n分有几种表示法.(结果可能会很大,你需 ...

  10. TIME_WAIT状态存在的原因

    TIME_WAIT状态存在有两个理由: 1.可靠地实现TCP全双工连接的中断 2.允许老的重复分节在网络中消失 第一个理由:如果客户端的ACK丢失了,服务器将会重新发送它的最终的那个FIN,因此客户端 ...