问题:如果o1和o2有两个对象o1.equals(o2),那么关于o1.hashCode()== o2.hashCode()之间关系的java标准约定是什么?
答案:o1.hashCode()== o2.hashCode()
我不知道为什么......我认为是因为o1和o2是不同的对象,所以它们不应该具有相同的hashCode。如果问题是o1 == o2,那么我会说他们有相同的hashCode,因为o1和o2都指向同一个对象。
有谁可以指出我做错了什么?
答案 0 :(得分:1)
.equals用于评估对象的值。对象进行哈希处理时,系统级别的数值将用于生成哈希码(如果愿意,则为整数)。如果对象完全相同(例如,在属性方面),它们将具有相同的数字序列,因此散列到相同的值。
答案 1 :(得分:0)
Equals和Hashcode总是齐头并进。如果o1 == o2
,那么它们指向相同的内存,并且哈希码非常平等。但是,如果你实现了Equals,你必须确保当Equals返回true时,Hashcode必须返回相同的值。
以下是official docs,其中列出了要求/标准。