2013-01-11 50 views
1

当重写类的equals()hashCode()方法时,以下方法是否可行?在hashCode中使用静态变量()

我的equals()方法完成我所有的逻辑来查看对象是否相等。这个类有一个静态变量(我们就叫它hashCodeReturn)被设置为1。

当过equals方法达到逻辑将返回false,它增加了1至hashCodeReturn

hashCode()后来干脆回报hashCodeReturn

是否有任何理由不起作用?

非常感谢。

+0

hashCodeReturn的目的是什么? – Swapnil

+1

请提供一些示例代码,以便我们可以看到你的意思... –

+0

我会把代码放在帖子的底部(好吧,我会在8小时内,当stackoverflow让我!) – Mike

回答

10

不,它不会工作。

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

hashCode的一般合同是:

每当它是一种 执行的Java应用程序的期间在同一对象上调用一次以上,hashCode方法必须始终 返回相同的整数,没有提供在等于 中使用的信息在对象上的比较被修改。

+0

静态值与类关联,每当equals方法返回false时递增。这意味着你可以得到A的哈希码,比较B和C为假,然后得到A的不同哈希码(这一切都假设我已经正确理解了这个问题!) –

+0

这是正确的杰夫。所以合同不会被打破,因为2个相同的对象将具有相同的hashCode(显然,我不会使用1也许,也许是一个随机数) – Mike

+0

@JeffFoster:是的,我添加哈希码的合同后删除了我的评论。这使你的解释精确,并显示他的方法的缺陷。 (+1) – jlordo

0

Hashcode()必须返回时,对在同一object参考称为同value但返回static值,这可能有无改变时以前称为可能改变,因为这是它可能会递减,递增独立类的变量时其object,这将改变下一个电话hashcode()