В чем различия между String и &str в Rust?
Этот вопрос проверяет понимание разницы между владением строки (String) и ссылкой на строку (&str).
Короткий ответ
String — это владимый тип данных, размещённый в куче. Он изменяем и позволяет манипулировать содержимым строки.&str — это заимствованный тип данных, обычно используемый для чтения строковых данных. Он неизменяем и эффективен для передачи строк в функции.
Длинный ответ
В Rust строки представлены двумя основными типами: String и &str. Эти типы имеют разные цели и особенности.
1. String:
- Владимый тип данных.
- Хранится в куче, что позволяет динамически изменять содержимое.
- Подходит, когда требуется создавать, изменять или сохранять строку.
- Пример создания:
let mut owned = String::from("Hello");
owned.push_str(", world!");
println!("{}", owned); // "Hello, world!"- &str:
- Заимствованный тип данных.
- Представляет неизменяемую ссылку на строку, хранящуюся либо в куче, либо в статической памяти.
- Эффективен для передачи строк без их копирования.
- Пример использования:
let borrowed: &str = "Hello, world!";
println!("{}", borrowed);
Основные отличия:
- String владеет данными и освобождает их при выходе из области видимости, в то время как &str ссылается на данные, которыми управляет кто-то другой.
- Методы String ориентированы на изменение строки (push, clear), тогда как методы &str предназначены для чтения и анализа строки (len, contains).
Используйте String для хранения и изменения строк, а &str — для передачи ссылок на строки и работы с неизменяемыми данными.