首页 > 试题广场 >

关于equals和hashCode描述正确的是 &n...

[不定项选择题]
关于equals和hashCode描述正确的是    ()
  • 两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
  • 两个obj,如果hashCode()相等,equals()不一定相等
  • 两个不同的obj, hashCode()可能相等
  • 其他都不对
“==”:作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。
"equal":作用是判断两个对象是否相等,但一般有两种使用情况
              1.类没有覆盖equals()方法,则相当于通过“==”比较
              2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String

地址比较是通过计算对象的哈希值来比较的,hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,对象不相等,hashcode()可能相等,哈希冲突
编辑于 2019-07-11 21:46:21 回复(8)
hashCode()的存在是为了查找的快捷性,用于在散列存储结构中确定对象的存储地址
如果两个对象 equals相等,则 hashCode()也一定相等
如果 equals方法被重写,则 hashCode()也应该被重写
如果两个对象的 hashCode()相等, equals()方法不一定相等
equals方法没有重写,比较的就是应用类型的变量所指向的对象的地址
发表于 2019-09-27 14:25:01 回复(1)
两个对象的equals比较为true,那么他们的HashCode一定相同,反之,两个对象的HashCode相同不一满足equals比较为true,解释一下为什么,这是因为HashCode采用的其实是一种杂凑算法,当然,这也是Java认为最有效的算法,既然是凑出来的那么就有一种情况就是两个不同的对象返回相同的hashCode,并且这种算法越糟糕返回相同的概率越大
编辑于 2021-04-12 23:16:02 回复(2)
发表于 2021-02-07 09:59:46 回复(0)
A equals没有被重写的情况下,equals相等,则对象引用地址相等,hashCode()一定相等;
B、C 哈希冲突时二者都正确;
发表于 2021-03-30 11:12:20 回复(0)
equals相同,hashCode不一定相等;
hashCode相等,equals不一定相等;
两个不同的obj,hashCode可能相等。
发表于 2021-05-20 10:11:48 回复(0)
equals判断两个对象是否相同,hashcode将对象地址转换为整数类型返回。1、如果两个对象equals,Java运行时环境会认为它们的hashcode一定相等。2、如果两个对象不equals,它们的hashcode有可能相等。3、如果两个对象hashcode相等,它们不一定equals。4、如果两个对象hashcode不相等,它们一定不equals。
发表于 2021-04-28 10:28:57 回复(0)
A,符合代码规范的情况下。看漏了
发表于 2021-01-04 12:37:04 回复(0)
“==”:作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。
"equal":作用是判断两个对象是否相等,但一般有两种使用情况
              1.类没有覆盖equals()方法,则相当于通过“==”比较
              2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String

地址比较是通过计算对象的哈希值来比较的,hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,对象不相等,hashcode()可能相等,哈希冲突
发表于 2020-11-20 02:02:14 回复(0)
hashCode()比较两个对象时,不仅比较两个对象的值,还有地址,两者都相等,hashCode相等,也可以出现地址相等,内容不相等

发表于 2020-07-17 20:29:43 回复(0)
obj1.equals(obj2) ==> Hash(obj1)==Hash(obj2).
前者是后者的充分非必要条件。
编辑于 2022-02-02 15:56:29 回复(0)
equals相同,hashCode不一定相等;
hashCode相等,equals不一定相等;
两个不同的obj,hashCode可能相等。
发表于 2021-09-28 16:39:59 回复(0)
hash表会出现地址冲突,hashcode实际比较的是地址。equal比较的是内容,一般string类型用equal进行比较。==不仅要内容相同而且要地址相同。
发表于 2021-01-06 10:29:29 回复(0)
equals相等,hashcode相等 equals不相等,hashcode可能相等 不同的两个对象,hashcode可能相等
发表于 2020-10-12 08:42:34 回复(0)
hashCode()可能会出现碰撞的情况,所以两个不同的对象有相同的hashCode()很正常,但不一定相等。
发表于 2020-06-23 14:52:24 回复(0)
重写hashcode算不算符合代码规范情况,重写equals算不算?
发表于 2020-03-12 09:11:32 回复(0)
请参阅java.lang.Object类中hashCode()和equals()方法注释,其中详细地描述了这两个方法的设计定位(也包括该题的标准答案)。
发表于 2019-12-05 20:06:17 回复(0)
借用HashMap的put(k,v)方法的实现原理来说明这道题目:
(1)首先将k,v封装到Node对象当中(节点)。
(2)然后它的底层会调用K的hashCode()方法得出hash值。
(3)通过哈希表函数/哈希算法,将hash值转换成数组的下标,下标位置上如果没有任何元素,就把Node添加到这个位置上。如果说下标对应的位置上有链表。此时,就会拿着k和链表上每个节点的k进行equal。如果所有的equals方法返回都是false,那么这个新的节点将被添加到链表的末尾。如其中有一个equals返回了true,那么这个节点的value将会被覆盖。
发表于 2022-09-28 10:22:49 回复(0)
class B {
     @Override
     public boolean equals(Object obj) {
          return true;
     }
}
class Test{
     public static void main(String[] args) {
          B b = new B();
          B b1 = new B();
          System.out.println(b.hashCode());
          System.out.println(b1.hashCode());
          System.out.println(b.equals(b1));
     }
}
怎么解释?
发表于 2022-03-20 19:54:06 回复(1)
只要记住,finally中的语句是一定会执行的,但是如果try catch中有return,finally中语句不就不会执行了。但是你要记住finally中语句一定会执行的,所以try catch中语句在return之前,一定会先执行finally中语句,再return
发表于 2022-01-28 20:01:34 回复(0)