Я бегу в вопрос о равных и Hashcode контрактов: здесьравно и хэш-код
Дано:
class SortOf {
String name;
int bal;
String code;
short rate;
public int hashCode() {
return (code.length() * bal);
}
public boolean equals(Object o) {
// insert code here
}
}
Какой из следующих будет выполнять Equals() и хэш-код() контракты для этого класс? (Выберите все подходящие варианты.)
Правильный ответ C:
return ((SortOf)o).code.length() * ((SortOf)o).bal == this.code.length() *
this.bal;
D:
return ((SortOf)o).code.length() * ((SortOf)o).bal * ((SortOf)o).rate ==
this.code.length() * this.bal * this.rate;
У меня есть вопрос о последнем выбора D, скажем, если два объекта
A: code.length = 10, bal = 10, rate = 100
B: code.length = 1 0, bal = 100, rate = 10
Затем, используя метод equals()
в D, мы получаем A.equals(B)
, оценивая true
справа? Но тогда они получают другой hashCode, потому что у них разные балансы? Разве что я где-то неправильно понял эту концепцию? Может ли кто-нибудь прояснить это для меня?
Спасибо за помощь, я думаю, что у меня есть. Да, я использую эту книгу для изучения scjp, и я получил этот вопрос из симулятора экзамена. – y62wang
Вы также можете прочитать эту тему в «Эффективном Java Second Edition» Джоша Блоха. Очень приятно объяснил! –
<3 эффективных java ... – atamanroman