Почему пустая строка Java имеет нулевой хэш-код?JAVA

Программисты JAVA общаются здесь
Гость
Почему пустая строка Java имеет нулевой хэш-код?

Сообщение Гость »

Только недавно я обнаружил, что пустая строка имеет нулевой хеш-код. Это меня удивляет, поскольку null обычно присваивается нулевой хэш-код, например, Objects.hashCode(Object) и ArrayList.hashCode().
Вот исходный код JDK 11 для String.hashCode():

Код: Выделить всё

/** Cache the hash code for the string */
private int hash; // Default to 0

public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
hash = h = isLatin1() ? StringLatin1.hashCode(value)
: StringUTF16.hashCode(value);
}
return h;
}
Идея: пустая строка может иметь хеш-код один, поскольку он будет соответствовать Arrays.hashCode(Object[]) для пустых массивов. В качестве альтернативы можно использовать любое другое жестко запрограммированное ненулевое значение, аналогичное SerialVersionUID. Целью было бы отличить от null. Если эта идея ошибочна (за исключением проблем обратной совместимости), пожалуйста, объясните, почему.
Я нашел другие вопросы/ответы, которые приближаются к этой проблеме... но ни один из них не дает точного ответа:

Подробнее здесь: https://stackoverflow.com/questions/652 ... -code-zero

Вернуться в «JAVA»