安卓面试中高级安卓开发面试高频题之——equals()和hashcode()关系,区别

简介: 这个问题在今年面试中,是出现频率非常高的一道题。并且,在面试过程中前三题中就会出现。这也是安卓走到现在,招聘中级开发工程师的一个起步问题。关于这个问题,有的面试官会从object这个类来引出。

这个问题在今年面试中,是出现频率非常高的一道题。并且,在面试过程中前三题中就会出现。这也是安卓走到现在,招聘中级开发工程师的一个起步问题。


关于这个问题,有的面试官会从object这个类来引出。比如会先问:object这个类有哪些方法。然后再转移到这个equals和 hashcode的问题上。


我相信你一定也从各个地方查到了他们的异同点。如果你不知道,那么我建议你去百度一下他们的比较原理,这里我只给出一个分享链接:https://www.cnblogs.com/keyi/p/7119825.html


如果你知道他们的异同点,也不要直接回答相不相等。比如,面试官问你:“两个a,equals相等吗?hashcode相等吗?”。这个问题不要直接作答相不相等。这道题是有坑的。回答相等,不好;回答不相等也不好。面试官的意图不是要你回答相不相等。哪怕你就是知道相不相等,知道答案,你直接回答相不相等,不是一个好的回答。在《技术岗面试中面临的最大困境》一文中我有说到:技术岗面试的最大困境(挑战)在于如何在面试中,最大程度的表达出你的技术能力。所以,这道题,我建议的回答方式如下:


相不相等,要看重不重写这2个方法。

(话外音:你可以找到object这个类,找到这2个方法,有英文的注释说明,如果你觉得看源码费劲,那么我直接给你说结果)

第一:equal()相等的两个对象他们的hashCode()肯定相等。(hashcode经过hash计算得到的是一个int值)

第二:hashCode()相等的两个对象他们的equal()不一定相等。


在Java中,哈希码代表对象的特征。

例如对象

String str1 = “aa”, str1.hashCode= 3104

String str2 = “bb”, str2.hashCode= 3106

String str3 = “aa”, str3.hashCode= 3104

根据HashCode由此可得出str1!=str2,str1==str3

下面给出几个常用的哈希码的算法。

1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。

默认情况(没有重写equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。

要是类中重写了equals方法,那么就要根据具体的代码来确定equals方法的作用了,重写后一般都是通过对象的内容是否相等来判断对象是否相等。

2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串所在的堆空间相同,返回的哈希码也相同。所以,两个“a”,如果是String类型的,他们的哈希值是一样的。

3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,

例如Integer i1=new Integer(100) ,  i1.hashCode的值就是100 。

由此可见,2个一样大小的Integer对象,返回的哈希码也一样


好了,说了这么多,你试试记不住?

面试的时候,要表达这么多有难度对吧。那好,如果你不能表达好上面的,那么我就给你一个面试的时候的一个答案吧:


第一:equal()相等的两个对象他们的hashCode()肯定相等。(hashcode经过hash计算得到的是一个int值)

第二:hashCode()相等的两个对象他们的equal()不一定相等。


第三:对于需要大量并且快速的对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了(别就比较一个string ,你也先用hashcode,再用equals)。

 

以上就是面试时这个问题的回答方式。你记住了吗?


引申:如果面试官问:有一个对象,Student a

= new Student(“小饼干”) , Student b = new Student(“小饼干”),那么a b,的hashcode 和 equals分别相等吗?这个思考题就留给你了。如果你真的理解了这2个方法的原理,那就在下方留下你的答案吧。(备注:答案本文中就可以知道。)


提醒:转换成String的几种方法,还有他们的区别。这个初级题,自己表述一下(重要的事情说三遍,是表达一下,不是在心里知道。表达一遍!表达一遍!!表达一遍!!!)


欢迎各位大佬,各位精英,各位祖国的栋梁积极投稿。投稿邮箱:578161213@qq.com

@



���r���E

相关文章
|
1月前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
181 93
|
1天前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
11 2
|
1天前
|
消息中间件 存储 Java
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
Android面试高频知识点(2) 详解Android消息处理机制(Handler)
9 1
|
1天前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
8 1
|
6天前
|
存储 缓存 网络协议
5个Android性能优化相关的深度面试题
本文涵盖五个Android面试题及其解答,包括优化应用启动速度、内存泄漏的检测与解决、UI渲染性能优化、减少内存抖动和内存溢出、优化网络请求性能。每个问题都提供了详细的解答和示例代码。
12 2
|
1月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
57 20
Android经典面试题之图片Bitmap怎么做优化
|
6天前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
7天前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
10 1
|
1月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
41 4
|
9天前
|
消息中间件 存储 前端开发
资深Android开发的5个经典面试题
本文首发于公众号“AntDream”,欢迎关注。文章详细解答了五个常见的Android面试题,涵盖内存泄漏与溢出、Binder机制、MVC/MVP/MVVM架构、Handler机制及Context对象等内容,帮助读者深入了解Android开发的核心概念。
16 0