该问题的作者说答案是D,但我想知道为什么答案不应该是C ??
问:关于可以填空的代码,哪个陈述是正确的?
class Sticker {
public int hashCode() {
return 1;
}
public boolean equals(Object o) {
return____________ ;
}
}
A.它必须返回false。 B.必须回归真实。 C.它可以返回true或false。 D.以上都不是。
编辑1:
作者给出的答案和解释如下:如果一个类的两个实例具有相同的哈希码,则它们可能相同也可能不相等。反之则不然。如果两个对象相等,则它们必须具有相同的哈希码才能符合这些方法的约定。但是,在这种情况下,答案不是上述情况,因为该方法不能简单地返回true或false。根据equals()的规则,如果传入null,则结果必须为false。如果传入对象标识,则由于反身性,结果必须为true。因此,选项D是正确的。
编辑2:可能是作者的意思如下以上给出的解释:我想可能是作者想说如果我们从true
返回equals(Object)
然后有可能有人可以通过null
在equals(Object)
在这种情况下它将与返回值true
相矛盾,因为基于null
论证被传递的返回值应该是false
而不是true
。同样地,如果我们返回false
,那么有可能传递Sticker
对象身份,然后它将再次相互矛盾。所以基本上我们不能用true
或false
填补空白。可能这就是为什么作者说答案是D.
作者写的答案选项写得不好。从他们的解释中可以清楚地看出,他们的答案选择可以更好地写成:
A.应该总是返回false。 B.它应该总是返回true。 C.返回true或返回false始终都是正确的。 D.以上都不是。
问题也可能从重写中受益:
假设填充空白的代码正确地满足了equals()方法的约定,下面哪个语句总是如此?
提交人犯了两项严重违反计算机科学的行为