Java 在hashCode()中使用静态变量

Java 在hashCode()中使用静态变量,java,hashcode,Java,Hashcode,当重写类的equals和hashCode方法时,以下方法是否有效 查看对象是否相等的所有逻辑都在equals方法中完成。该类有一个静态变量,我们称之为hashCodeReturn,该变量设置为1 当equals方法到达将返回false的逻辑时,它会向hashCodeReturn添加1 然后,hashCode只返回hashCodeReturn值 有什么理由这不起作用吗 非常感谢。不,它不起作用 相同的两个对象的哈希代码(例如,相同的引用)应相同。通过返回静态变量的结果,您将打破这一限制 hashC

当重写类的equals和hashCode方法时,以下方法是否有效

查看对象是否相等的所有逻辑都在equals方法中完成。该类有一个静态变量,我们称之为hashCodeReturn,该变量设置为1

当equals方法到达将返回false的逻辑时,它会向hashCodeReturn添加1

然后,hashCode只返回hashCodeReturn值

有什么理由这不起作用吗

非常感谢。

不,它不起作用

相同的两个对象的哈希代码(例如,相同的引用)应相同。通过返回静态变量的结果,您将打破这一限制

hashCode的总合同为:

当在一个过程中对同一对象多次调用时 在执行Java应用程序时,hashCode方法必须一致 如果在equals中未使用任何信息,则返回相同的整数 修改对象上的比较

不,那不行

相同的两个对象的哈希代码(例如,相同的引用)应相同。通过返回静态变量的结果,您将打破这一限制

hashCode的总合同为:

当在一个过程中对同一对象多次调用时 在执行Java应用程序时,hashCode方法必须一致 如果在equals中未使用任何信息,则返回相同的整数 修改对象上的比较


Hashcode在调用同一对象引用时必须返回相同的值,但在返回静态值时必须返回相同的值,该静态值可能在以前调用时已更改,并且可能会更改,因为该类变量可能会独立于其对象而递减和递增,并且在下次调用时会更改hashcode。

在调用同一对象引用时,hashcode必须返回相同的值,但在返回静态值时,该静态值可能在以前调用时已更改,并且可能会更改,因为该静态值是类的变量,它可能会独立于其对象而递减和递增,并且在下次调用时会更改hashcode。

hashCodeReturn的目的是什么?请提供一些示例代码,以便我们了解您的意思…我将把代码放在文章的底部。好的,我会在8小时后stackoverflow允许我的时候发布@Mike别忘了Jeff的回答。hashCodeReturn的目的是什么?请提供一些示例代码,以便我们了解您的意思…我将把代码放在帖子的底部。好的,我会在8小时后stackoverflow允许我的时候发布@Mike不要忘记Jeff的答案。静态值与类相关联,并且每次equals方法返回false时都会递增。这意味着你可以得到a的hashcode,将B和C比较为false,然后得到a的另一个hashcode。这一切都假设我正确理解了这个问题!没错,杰夫。所以契约不会被破坏,因为两个相等的对象将具有相同的哈希代码。显然,我不会使用1,可能是随机的number@JeffFoster:是的,在您添加hashcode合同后,我立即删除了我的评论。这使你的解释准确无误,显示了他的方法的缺陷+1@Mike当前位置合同将被破坏,请参见Jeffs在回答下的评论。谢谢各位-我想我现在明白了。非常感谢您的时间,静态值与类相关联,并且每次equals方法返回false时都会递增。这意味着你可以得到a的hashcode,将B和C比较为false,然后得到a的另一个hashcode。这一切都假设我正确理解了这个问题!没错,杰夫。所以契约不会被破坏,因为两个相等的对象将具有相同的哈希代码。显然,我不会使用1,可能是随机的number@JeffFoster:是的,在您添加hashcode合同后,我立即删除了我的评论。这使你的解释准确无误,显示了他的方法的缺陷+1@Mike当前位置合同将被破坏,请参见Jeffs在回答下的评论。谢谢各位-我想我现在明白了。非常感谢您抽出时间