заканчивая цифрой, вы получите дубликаты кодов для неравных объектов, как показывает ответ 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?

Ответы на вопрос(2)

Ваш ответ на вопрос