Я думаю, что вы неправильно читаете код.
После первой итерации h равно 104.
Итак, вторая итерация говорит:
h = 31 * 104 + 97;
... это именно то, что вы ожидали.
Похоже, вы неправильно прочитали эту строку:
h = 31 * h + s.charAt(i);
как это:
h += 31 * h + s.charAt(i);
В данном коде мы не добавляем новое значение к h
, мы используем простое присваивание.
Если вы на самом деле написали код и увидели неправильное значение, проверьте, есть ли у вас «+ =» вместо «=».