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

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

Сообщение Anonymous »

Только недавно я обнаружил, что пустая строка имеет нулевой хеш-код. Это меня удивляет, поскольку 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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