扫码关注公众号
hashCode() 和 equals() 方法重要性何在 ?
Java中的HashMap使用hashCode和equals方法来确定键值对的索引。根据键去查询对应的值时,同样会用到这两个方法。如果这两个
两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?(面试题)
不对,两个对象的hashCode()相同,equals()不一定true。代码示例:Stringstr1="通话";Stringstr2="重地";System.out.println(String.format("str1:%d|str2:%d",str1.hashCode(),str2.hashCode()));System.out.println(str1.equals(str2));执行的结果:str1:1179395|str2:1179395false代码解读:很显然“通话”和“重地”的hashCode()相同,然而equals()则为false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
针对下面的代码块,哪个equal为true:()
正确答案是Astring是final修饰的,会将创建的变量放入字符串常量池,当再创建同样的字符串时,发现常量池中有则直接使用
为什么重写equals时必须重写hashCode方法?
hashCode的作用是获取哈希码,也称为散列码,它实际上返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode定义在JDK的Object类中,这就意味着Java中的任何类都包含有hashCode函数。如果两个对象相等,则hashcode一定也是相同的。两个对象相等,对两个对象分别调用equals方法都返回true。但是,两个对象有相同的hashcode值,它们也不一定是相等的。因此,equals方法被覆盖过,则hashCode方法也必须被覆盖。hashCode的默认行为是对堆上的对象产生独特值。如果没有重写hashCode,则该class的两个对象无论如何都不会相等。(即使这两个对象指向相同的数据)