哈希娱乐 行业新闻 党建先锋

哈希游戏平台深入剖析hashCode和equals的区别及大厂面试题

发布时间:2025-10-14 17:15:11  浏览:

  哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏

哈希游戏平台深入剖析hashCode和equals的区别及大厂面试题

  搞清楚这一点,再分别解析equals和hashCode,然后作出对比。最后,给出关于equals和hashcode重要面试题及答案。

  如果变量是引用数据类型,==仍然比较变量的值(不忘初心),只不过这个值是对象的地址。

  equals只能作用于引用数据类型。 equals如果没有重写,比较的是引用变量的值,即对象地址。equals重写之后,比较的是对象的内容。例如使用equals比较String的value值是否相等。

  作用:hashCode() 的作用是获取哈希码,也称为散列码,其作用是将对象的地址值(即引用变量)映射为integer类型的哈希值。这个哈希码的作用是确定该对象在哈希表中的索引位置。

  注意,字符串(String类型)可能有相同的散列码。这是由于String类型中重写了hashcode方法。

  看下图可知,String类型的字符串值是保存在value中的。而value会保存在字符串常量池中。

  s1和s2的引用变量,即对象的地址,是不同的。但由于s1和s2的引用对象的value数组值是相同的。故,在计算哈希值时,s1和s2的就会得到相同的哈希值。

  equals由于比较的是对象的值,值相同与否是可以确定的,所以是可靠的。

  3. 为什么不直接equals比较值是否相同,而先要计算hashCode?

  hash算法是二进制算法,计算式本质是二进制,所以hash算法速度很快。如若hashCode不同则可直接存储不用equlas比较。所以先计算hashCode大大加快了存储速率。

  Object类的equals()方法上方的注释里有写到:当我们将equals方法重写后有必要将hashCode方法也重写,这样做才能保证不违背hashCode方法中“相同对象必须有相同哈希值”的约定。

  由此可见,重写equals后必须重写hashcode是为了保证重写后的equals方法认定相同的两个对象拥有相同的哈希值。

  至于equals相同hashcode也必须相同的原因,是为了与Java集合配套使用。

  我们假设自定义一个学生类型Student,且Student只重写了equals方法。然后,new出两个属性值完全一样的对象,将其先后添加到HashSet中。

  会将传入学生对象的hash值与(数组长度-1)进行&操作,得到数组的下标值。但是由于学生类型,没有重写hashCode,则其hashcode()方法默认是通过对象的地址值的得出。

  由于两个学生对象的地址值不同,因此哈希值不同。那么,根据哈希值计算出的索引位置就会不同,则会将两个学生对象存入不同的数组位置。但是,由于equals是根据学生信息计算的,所以equals是相同的。这就违背了hashset的去重功能(hashset不会将相同的对象存到数组中)。因此,必须重写HashCode()方法。

  好了,到此为止,关于hashcode和equals的知识点大家应该有个深刻的理解了。

  链接:提取码: fi3x 复制这段内容后打开百度网盘手机App,操作更方便哦

  23年硕士毕业半年被裁,一个月斩获大厂offer。面试经历50+,擅长校招社招求职笔试和面试全流程,擅长简历撰写。跟着周哥走,offer手里有!关注周哥不迷路!