В чем разница между str и &str?
str представляет собой неизменяемую последовательность байтов UTF-8 динамической длины где-то в памяти. Поскольку размер неизвестен, его можно обрабатывать только за указателем. Это означает, что str чаще всего используется как &str — ссылка на некоторые данные UTF-8, обычно называемые «срезом строки» или просто «срезом». Срез — это просто представление данных, и эти данные могут быть где угодно, например:

- В статическом хранилище: строковый литерал "foo"представляет собой файл &'static str. Данные жестко закодированы в исполняемый файл и загружаются в память при запуске программы.

- Внутри выделенной кучи: String разыменовывает представление &str в строке.

- На стеке: Например, в следующем примере создается массив байтов, выделенный стеком, а затем он получает представление этих данных как &str:

use std::str;

let x: &[u8] = &[b'a', b'b', b'c'];
let stack_str: &str = str::from_utf8(x).unwrap();

Используйте String, если вам требуется владение строковыми данными (например, передача строк в другие потоки или их создание во время выполнения), и используйте &str, если вам нужно только представление строки.
str тип - это неизменяемый тип строки в Rust. У него известен размер и статическое время жизни&'static str. Это тип строковых литералов как тут "hello, world". Он известен на момент компиляции и состоит непосредственно из байт, представляющих строку в UTF-8. То есть является значением. Из-за особенностей UTF-8 количество байт может быть больше чем длина строки. Расширяемым, владеющим, изменяемым типом является тип String. В нем строки так же закодированы в UTF-8. Под него память выделяется в куче во время выполнения. Переменная содержит указатель на начало строки, длину строки и емкость. А &str - это ссылка на строку. В Rust ссылки являются заимствующими. Ссылка на строку является срезом строки(указатель и длина), который может заимствовать и указывать на строку типа str и на строку типа String. То есть работает с обоими типами строк. Причем срез строки может указывать как на всю строку, так и на ее часть.