JavaEE
当前位置:首页 > 学习资料 > JavaEE >

常见Java面试题之两个对象值相同hash code不同是否正确

更新时间:2020年07月24日   作者:spoto
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?可能很多同学尤其是新手看到题干这么多内容以及对象就已经晕了,但是只要一个一个知识点理过去,还是能够梳理清楚。对象equals() 方法以及哈希码也是最经常遇到的一个基础Java面试题,不管原来知道不知道,现在告诉你,赶紧记牢面试无忧!

常见Java面试题之两个对象值相同hash code不同是否正确

两个对象值相同(x.equals(y) == true),但却可有不同的hash code?

两个对象值相同hash code不同这种说法是不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:
(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;
(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

本题涉及java知识点分析

Java equals() 方法

equals() 方法用于将字符串与指定的对象比较。如果给定对象与字符串相等,则返回 true;否则返回 false。
语法:public boolean equals(Object anObject)

java 哈希码(hash code)

哈希码代表了对象的一种特征,例如我们判断某两个字符串是否==,如果其哈希码相等,则这两个字符串是相等的。其次,哈希码是一种数据结构的算法。常见的哈希码的算法有:
* Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
* String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
* Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。

以上是思博网络为广大奔走在面试以及学习阶段的java同行整理的关于Java equals() 方法以及哈希码(hash code)可能遇到的面试问题以及重要知识点,可能存在不足或者需要补充,您有什么观点和认识,欢迎指正补充,大家一起快乐学Java,高薪在就业!
如果遇到什么疑问或者困惑,可以联系我们,乐于与您分享讨论!
免费试听
思博SPOTO在线咨询

相关资讯

7天无条件退款
24小时实验室开放
全程跟踪服务
无条件免费重读