首页 > 试题广场 >

两个对象值相同(x.equals(y) == true),但

[问答题]
请判断,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,该说法是否正确,为什么?
不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
发表于 2019-05-02 00:55:27 回复(0)
更多回答
我将回答写在了这篇文章中,文章中配有代码,结合代码一起就能轻松的理解
发表于 2019-04-02 22:36:48 回复(0)
正确 如果此对象重写了equals方法,那么可能出现这两个对象的equals相同,而hashcode不同。因此可以说它是对的。 但是,如果此对象继承Object,没有重写equals方法,那么就使用Object的equals方法,Object对象的equals方法默认是用==实现的,那么如果equals相同,hashcode一定相同。
发表于 2019-04-20 23:13:12 回复(1)
不正确。如果两个对象equals为true,应该有相同的hashcode,这是容器进行两个对象是否相等的依据
发表于 2019-01-30 12:11:31 回复(0)
如果重写了equals()和hashCode()这两个方法,equals判断为true,那么hashcode一定相同。
发表于 2019-03-25 11:46:27 回复(0)
1、如果两个对象相同,那么它们的hashCode值一定要相同;2、如果两个对象的hashCode相同,它们并不一定相同 上面说的对象相同指的是用eqauls方法比较。
发表于 2019-03-22 07:41:22 回复(0)
可以的,你重写了equals方法就但没重写hashcode方法,就会出现这样的问题。
发表于 2019-01-20 18:48:25 回复(0)
正确的。如果类里重写了equals方法,那么两个对象equals比较可能相等,但是hashCode不相同。一个简单例子如下
class hashTest{  public String string; public hashTest(String s1){
      this.string=s1;
    }  public boolean equals(hashTest h2){  if(this.string.equals(h2.string))  return true;  return false;
    }
}

发表于 2021-02-22 18:00:43 回复(0)
该说法正确,当重写了equals方法但没重写hashCode方法,就会出现这样的问题。
发表于 2020-05-20 10:19:07 回复(0)
测试的时候如果打开了Lombok的@Data注解,会自动的引入equals和hashcode重写QAQ
发表于 2020-03-26 17:49:06 回复(0)
不对,因为有相同的hashcode
编辑于 2019-05-04 22:32:29 回复(0)
如果此对象重写了equals方法,那么可能出现这两个对象的equals相同,而hashcode不同。因此可以说它是对的。 但是,如果此对象继承Object,没有重写equals方法,那么就使用Object的equals方法,Object对象的equals方法默认是用==实现的,那么如果equals相同,hashcode一定相同
发表于 2019-04-26 20:55:39 回复(0)
不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同
发表于 2019-04-26 20:41:29 回复(0)
不正确, 1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。 2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
发表于 2019-03-16 23:04:08 回复(0)
不正确,如果两个对象equals为ture则hashcode相等,如果两个对象hashcode相同则equals不一定相同
发表于 2019-03-11 11:37:54 回复(0)