Код: Выделить всё
public final int hashCode() {
int result = ...
result = 31 * result + netAmount.hashCode();
result = 31 * result + grossAmount.hashCode();
...
return result;
}
Код: Выделить всё
Double.valueOf("460.4").hashCode() = 639279104
Double.valueOf("-460.4").hashCode() = -1508204544
Double.valueOf("460.4").hashCode() * 2 = 1278558208
Double.valueOf("-460.4").hashCode() * 2 = 1278558208
Код: Выделить всё
31 * (123 + Double.valueOf("460.4").hashCode()) + Double.valueOf("460.4").hashCode() = -1017901339
31 * (123 + Double.valueOf("-460.4").hashCode()) + Double.valueOf("-460.4").hashCode() = -1017901339
Код: Выделить всё
31*123 + 32*Double.valueOf("460.4").hashCode() = -1017901339
31*123 + 32*Double.valueOf("-460.4").hashCode() = -1017901339
Что мне здесь делать, чтобы предотвратить эти столкновения? Просто использовать 37 или какое-то другое число? Добавление хэш-кода сигнума двойного значения к результату?
edit: Для пояснения: «один лайнер» — это я пытаюсь соединить все строки в функции hashCode. По сути:
Код: Выделить всё
public final int hashCode() {
int result = 123
result = 31 * result + Double.valueOf("460.4").hashCode();
result = 31 * result + Double.valueOf("460.4").hashCode();
return result;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ve-doubles
Мобильная версия