Просто добавим некоторые детали относительно того, откуда могла прийти идея изменения хеш-кода.
Как правильно ответили другие ответы, хеш-код для конкретной строки всегда будет одинаковым для конкретной версии времени выполнения. Нет никаких гарантий, что более новая среда выполнения может использовать другой алгоритм, возможно, из соображений производительности.
Класс String переопределяет реализацию GetHashCode по умолчанию в объекте.
Реализация по умолчанию для ссылочного типа в .NET состоит в том, чтобы выделить последовательный идентификатор (хранится внутри .NET) и назначить его объекту (в хранилище кучи объектов есть слот для хранения этого хэш-кода, он назначается только в первом вызовите GetHashCode для этого объекта).
Следовательно, создание экземпляра класса, присвоение ему некоторых значений, затем получение хеш-кода, а затем выполнение точно такой же последовательности с одинаковым набором значений приведет к получению разных хеш-кодов. Это может быть причиной того, что некоторые считают, что хеш-коды могут измениться. Фактически, хотя это экземпляр класса, которому после присвоения назначен хеш-код, этот хеш-код не изменяется для этого экземпляра.
Редактировать : Я только что заметил, что ни один из ответов не имеет прямого отношения к каждому из вас (хотя я думаю, что ответ на них ясен), но просто приведу в порядок: -
Могу ли я быть уверен, что хеш для данной строки («очень длинная строка») всегда будет одинаковым?
В вашем использовании, да.
Могу ли я быть уверен, что две разные строки не будут иметь одинаковый хэш?
Нет. Две разные строки могут иметь одинаковый хеш.
Также, если возможно, насколько вероятно получить одинаковый хеш для разных строк?
Вероятность довольно низкая, результирующий хеш довольно случайный для домена 4G.