我在书中找到了这句话:
如果两个对象的哈希码相等,则可能并不意味着该对象 等于。
有人可以解释一下这句话吗?
答案 0 :(得分:10)
例如,考虑一下Long类的两个对象。由于hashCode
返回int
,而long
(和Long
)类型的范围大于int
,这意味着必须有两个Long
具有相同hashCode
的对象,即使它们彼此不相等。
答案 1 :(得分:6)
答案很简单:hashCode()
意外地可以为两个完全不同的对象生成相同的数字。
答案 2 :(得分:4)
哈希码是一个数值,用于插入和标识基于哈希的集合中的对象。
它是一个固定大小的值,因此它对于每个现有对象都不是唯一的,因此它会不时地发生冲突。基本上,hashCode()可以为两个不同的对象生成相同的值。
示例:
String first = "wh";
String second = "xI";
System.out.println(first.equals(second));
System.out.println(first.hashCode() + " " + second.hashCode());
答案 3 :(得分:1)
在哈希基本实现中,当你检查两个对象是否相等时,它首先检查第一个哈希码,如果它对两个对象都相同,那么它调用equals方法,它也返回true然后只考虑两个对象相等。
答案 4 :(得分:0)
2个相等的对象将具有相同的哈希码。
具有相同hascode的2个对象不必相等。
让我们说hascode方法通过对名字的字母(不好的做法,但是我用这个例子来解释它)产生它的价值,但是equals比较每个字符:
Paul和Mary都会返回hascode 4,但字符不相等
答案 5 :(得分:0)
即使对象的hashCode在创建时是内存地址,由于垃圾收集器,它仍然必须存储在对象头内。
垃圾收集器可以自由移动对象来完成其工作,因此当前内存地址可能随时更改。但是:
{@code hashCode}方法 必须始终返回相同的整数,前提是没有信息 用于{@code equals}对象的比较被修改。