Я сталкиваюсь с вопросом о контрактах equals и 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 () и hashCode ()для этого класса?(Выберите все подходящие варианты.)
Правильный ответ 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: длина кода = 10, бал = 10, скорость = 100
B: длина кода = 10, бал = 100, скорость = 10
Затем, используя метод equals()
в D, мы получим A.equals(B)
с оценкой true
, верно?Но тогда они получают другой хэш-код, потому что у них разные балансы?Это то, что я где-то неправильно понял концепцию?Может кто-нибудь уточнить это для меня?