Вот хороший способ подумать о разнице между типами значений, передачей по значению, ссылочными типами и передачей по ссылке:
Переменная является контейнером.
Переменная типа значения содержит экземпляр. Переменная ссылочного типа содержит указатель на экземпляр, хранящийся в другом месте.
Изменение переменной типа значения изменяет экземпляр, который она содержит. Изменение переменной ссылочного типа изменяет экземпляр, на который она указывает.
Отдельные переменные ссылочного типа могут указывать на один и тот же экземпляр. Следовательно, один и тот же экземпляр может быть видоизменен через любую переменную, которая указывает на него.
Переданный по значению аргумент - это новый контейнер с новой копией содержимого. Переданный по ссылке аргумент - это оригинальный контейнер с его исходным содержимым.
Когда аргумент типа значения передается по значению: переназначение содержимого аргумента не оказывает влияния вне области действия, поскольку контейнер является уникальным. Изменение аргумента не оказывает влияния вне области действия, поскольку экземпляр является независимой копией.
Когда аргумент ссылочного типа передается по значению: переназначение содержимого аргумента не оказывает влияния вне области действия, поскольку контейнер является уникальным. Изменение содержимого аргумента влияет на внешнюю область, поскольку скопированный указатель указывает на общий экземпляр.
Когда какой-либо аргумент передается по ссылке: переназначение содержимого аргумента влияет на внешнюю область, поскольку контейнер является общим. Изменение содержимого аргумента влияет на внешнюю область, поскольку содержимое является общим.
В заключение:
Строковая переменная является переменной ссылочного типа. Следовательно, он содержит указатель на экземпляр, хранящийся в другом месте. При передаче по значению его указатель копируется, поэтому изменение строкового аргумента должно повлиять на общий экземпляр. Однако строковый экземпляр не имеет изменяемых свойств, поэтому строковый аргумент не может быть изменен в любом случае. При передаче по ссылке контейнер указателя является общим, поэтому переназначение все равно будет влиять на внешнюю область.