Давайте начнем со схожести: ни один из них не компилируется, потому что вы не можете получить изменяемую ссылку (&mut
) объекта, который сам не определен как mut
.
Что касается правильная версия, это следующее:
let mut my_str = String::from("ali");
let str2 = &mut my_str;
my_str
необходимо определить как изменяемый, если мы хотим получить изменяемую ссылку на него, чтобы первая строка была однозначной.
Во второй строке префикс mut
к str2
необходим только в том случае, если вы собираетесь изменить ссылку, на которую указывает str2
. Пока вы только изменяете содержимое строки (без изменения какой строки вы изменяете), вам это не нужно.