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准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!
Java面试专题-基础篇(1)的更多相关文章
- Java面试准备基础篇_11.24
Java类加载机制 Java内存模型JMM 为什么 Redis 单线程能支撑高并发? 高并发下的接口幂等性解决方案! 面试官问:平常你是怎么对 Java 服务进行调优的? JAVA虚拟机(JVM)六: ...
- Java面试之基础篇(5)
41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系? hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hash ...
- Java面试之基础篇(4)
31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,”xyz”对应一个对象,这个对 ...
- Java面试之基础篇(2)
11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...
- Java面试之基础篇(1)
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- Java面试总结-基础篇2
1. mvn的dependency-management dependency-management是声明依赖,不实际引入,主要用于在父依赖中统一各依赖的版本,否则,各个子模块在引用同一依赖时,难免会 ...
- Java面试总结-基础篇1
java多线程-- 自旋锁,偏向锁 好处:可以举Servlet和CGI的对比用户线程和守护线程的区别:用户线程结束后JVM会退出,然后守护线程才会终止(比如垃圾回收线程),如何在java中创建守护线程 ...
- Java面试专题-集合篇(2)
- Java面试专题-多线程篇(2)- 锁和线程池
随机推荐
- .NET Core如何进行请求转发?
前言 冒个泡,近日,有关注我公众号的小伙伴私信我,遇到一个问题搞了很久没解决,此问题具有参考意义,这里跟大家分享下,希望对后续可能有需要的你能有所参考和帮助. 请求转发问题 内网环境跟外网隔离,现在外 ...
- Linux 环境下 C++ 的开发编译
Linux环境下C++程序的开发编译学习笔记 环境:vmware 运行下的Ubuntu 16.04 姓名:谢津 时间:2018/5/24 内容:1)vim的安装及配置:2)第一个C++程序的编写与编译 ...
- 【Android Studio】安卓开发初体验3.1——UI设计之常用控件
常用控件 首先对xml文件的编辑有三种模式 Code为纯代码 Split是一边代码,一边预览效果图 Designer就是有UI设计界面 TextView 用于在界面上显示一段文本信息 所有控件都可以在 ...
- 分布式文档存储数据库之MongoDB备份与恢复
前文我们聊了下mongodb的访问控制以及用户创建和角色分配,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13974656.html:今天我们来了解下mong ...
- MongoDB基础教程(安装、操作、配置)
MongoDB 下载安装 简易安装 # redhat, centOS sudo yum install -y mongodb # debian, ubuntu sudo apt install -y ...
- 手把手教你使用Vuex(一)
1.定义 vuex 是一个专门为vue.js应用程序开发的状态管理模式. 这个状态我们可以理解为在data中的属性,需要共享给其他组件使用的部分.也就是说,是我们需要共享的data,使用vuex进行统 ...
- Socket accept 简要分析
accept 用于从指定套接字的连接队列中取出第一个连接,并返回一个新的套接字用于与客户端进行通信,示例代码如下 #include <sys/types.h> /* See NOTES * ...
- 3-colorability
目录 1.1 3-colorability 1.1.1 3元可满足规约到3着色 1.1.2 证明充分和必要性 1.1 3-colorability 一个图的三着色问题:要使得边两头的结点颜色互不相同. ...
- .NET 开源工作流: Slickflow流程引擎高级开发(八) -- 审批网关(ApprovalOrSplit)模式的应用
前言:业务流程流转过程中,审批类型的节点是比较常见的,在审批操作中,常见的操作就是就是主管人员对待办事项进行同意或者拒绝.所以网关处理节点,就是需要对这两种审批结果进行预备处理,审批网关是在或分支(O ...
- mysql学习——数据库基本操作
查看当前数据库 创建数据库 查看数据库定义 删除数据库