问题的作者说答案是D,但我想知道为什么答案不应该是C?是吗?
问:哪种说法是正确的,关于代码,可以填补空白?
class Sticker {
public int hashCode() {
return 1;
}
public boolean equals(Object o) {
return____________ ;
}
}
它必须返回false。
它必须是真的。
它可以返回真或假。
以上都不是。
编辑1
以下内容:
笔者对此的回答和解释如下:
如果类的两个实例具有相同的哈希代码,则它们可能相等,也可能不相等。反之则不然。如果两个对象相等,则它们必须具有相同的hashcode才能符合这些方法的约定。然而,在这种情况下,答案不是上述任何一种,因为该方法不能简单地返回true或false。根据equals()的规则,如果传入null,则结果必须为false。如果传入对象标识,则由于反身性,结果必须是真的。因此,选项d是正确的。
编辑2
以下内容:
可能是指作者通过其上述解释:
我想也许作者想说如果我们回来
true
从
equals(Object)
那么有可能有人会通过
null
在
等于(对象)
在这种情况下,它将与返回值相矛盾
对
基于
无效的
传递的参数返回值应为
false
不
真的
是的。同样,如果我们返回
假
那么有可能
Sticker
对象标识被传递,然后它将再次发生冲突。所以基本上我们不能用任何一种方法填空。
真的
或
假
.也许这就是为什么作者说答案是D。