如果我在覆盖 hashCode() 函数时 return 常量整数会发生什么?

What happens if I return constant integer when overriding hashCode() function?

当我在下面的语句中使用hashCode()方法时:

System.out.println(obj.getClass().getName() + "@" +
                  Integer.toHexString(System.identityHashCode(obj))); 

我得到这样的输出:

"Contact@29453f441"

每个对象都是独一无二的。覆盖 hashCode() 的效果是什么?

来自系统文档class

public static int identityHashCode(对象 x)

Returns 与默认方法 hashCode() 返回的给定对象相同的哈希码,无论给定对象的 class 是否覆盖 hashCode()。空引用的哈希码为零。

所以即使 hashcode() 被覆盖,它也不应该影响它。

你会失去 hashmap 提供的任何性能,hashmap 可以在 O(1) 时间内从具有不同哈希的对象的集合中检索项目,这正是我们使用 HashMap 时想要实现的。

引用另一个问题:

When two unequal objects have the same hash value, this causes a collision in the hash table, because both objects want to be in the same slot (sometimes called a bucket).

如果您不使用 hashmap 或其他依赖对象哈希码的算法,则不会出现问题。

至于比较,它们将通过equals()进行区分。