gpt4 book ai didi

java - hashCode() 和 == 可以在不覆盖 hashCode 的情况下发散吗

转载 作者:行者123 更新时间:2023-12-01 16:45:41 24 4
gpt4 key购买 nike

给定java Object#hashCode文档快照:

As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (The hashCode may or may not be implemented as some function of an object's memory address at some point in time.)

我们如何让这个方法返回 true 而不重写 hashCode() 方法?

boolean challenge(Object o1, Object o2) {
return o1 == o2 && o1.hashCode() != o2.hashCode();
}

否则,请让此方法返回 true :

boolean makeMeReturnTrue(Object o1, Object o2) {
return o1 == o2 && System.identityHashCode(o1) != System.identityHashCode(o2);
}

最佳答案

你不能。

如果o1 == o2,则o1.hashCode()肯定会返回与o2.hashCode()相同的值,这将使表达式返回 false

hashCode() 的属性之一是一致性,这意味着在同一个程序中,hashCode() 对同一对象的结果不应改变(并且更改返回值是使表达式返回 true 的唯一方法 - 但您无法让 Object.equals 返回不一致的值,因此您将被迫覆盖hashCode 来为自己打破契约(Contract))。

关于java - hashCode() 和 == 可以在不覆盖 hashCode 的情况下发散吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51863625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com