Автор вопроса говорит, что ответ D, но мне интересно, почему ответ не должен быть C ??
В: Какое утверждение верно в отношении кода, который может заполнить пробел?
class Sticker {
public int hashCode() {
return 1;
}
public boolean equals(Object o) {
return____________ ;
}
}
A. Должен вернуть false.
Б. Он должен вернуть истину.
C. Он может вернуть либо true, либо false.
D. Ничего из перечисленного.
РЕДАКТИРОВАТЬ 1 :
Ответ и объяснение, данное автором, следующие:
Если два экземпляра класса имеют одинаковый хеш-код, они могут быть или не быть равными. Обратное неверно. Если два объекта равны, они должны иметь один и тот же хэш-код, чтобы соответствовать контрактам этих методов. Однако в этом случае ответ не один из вышеперечисленных, потому что метод не может просто вернуть истину или ложь. На основании правил equals (), если передается значение null, результат должен быть ложным. Если передается идентификация объекта, результат должен быть истинным из-за рефлексивности. В результате, вариант D. является правильным.
РЕДАКТИРОВАТЬ 2 :
Может быть, автор имеет в виду следующее объяснение, приведенное выше:
Я думаю, что, возможно, автор хочет сказать, что если мы вернем true
из equals(Object)
, то есть вероятность, что кто-то может передать null
в equals(Object)
, и в этом случае это будет противоречить возвращаемому значению true
как на основе null
передаваемого аргумента, возвращаемое значение должно быть false
, а не true
. Точно так же, если мы вернем false
, тогда есть вероятность, что идентификатор объекта Sticker
будет передан, и тогда это снова будет противоречить. Так что в принципе мы не можем заполнить пробел либо true
, либо false
. Возможно, именно поэтому автор сказал, что ответ был D.