заканчивая цифрой, вы получите дубликаты кодов для неравных объектов, как показывает ответ JacobM. Если вы заранее знаете, что b почти никогда не будет иметь числового значения в конце, то это разумный алгоритм хеширования.
ласса, поля которого являются исключительно примитивными, например:
class Foo
{
int a;
String b;
boolean c;
long d;
boolean equals(Object o)
{
if (this == o) return true;
if (!(o instanceof Foo)) return false;
Foo other = (Foo) o;
return a == other.a && b.equals(other.b) && c == other.c && d = other.d;
}
}
Это достаточно «хороший» способ написанияhashCode()
?
boolean hashCode()
{
return (b + a + c + d).hashCode();
}
То есть я строюString
из тех же полей, которыеequals()
использует, а затем просто использоватьString#hashCode()
.
Редактировать: Я обновил свой вопрос, чтобы включитьlong
поле. Как следуетlong
быть обработанным вhashCode()
? Просто дайте ему переполнитьсяint
?