Menu
Coddy logo textTech

String и &str

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 54 из 66.

В Rust есть два основных строковых типа, которые служат для разных целей: String и &str. Понимание разницы между ними крайне важно для эффективной работы с текстом в Rust.

String — это владеемая строка, размещенная в куче, которую вы можете изменять. Когда вы создаете String, ваша программа владеет этими данными и несет ответственность за управление их памятью. Вы можете увеличивать её, уменьшать и изменять её содержимое, так как она является изменяемой, если объявлена с помощью mut.

let mut my_string = String::from("Hello");
my_string.push_str(" World"); // Это работает, так как String является владеемым и изменяемым

В отличие от этого, &str (произносится как «string slice») — это заимствованное неизменяемое представление строковых данных. Оно не владеет данными, на которые указывает — это просто ссылка на некоторое строковое содержимое, которое существует в другом месте. Строковые литералы, такие как "Hello", на самом деле имеют тип &str.

let my_slice: &str = "Hello World"; // Это строковый срез

Представьте, что String — это владение книгой, в которой вы можете писать и которую можете изменять, в то время как &str — это как если бы вы одолжили чужую книгу: вы можете её читать, но не можете изменять. Это различие является основополагающим для системы владения Rust и помогает обеспечить безопасность работы с памятью.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Шпаргалка

В Rust есть два основных строковых типа:

  • String — владеемая, размещаемая в куче, изменяемая строка
  • &str — заимствованный, неизменяемый строковый срез (ссылка на строковые данные)

Создание String:

let mut my_string = String::from("Hello");
my_string.push_str(" World");

Строковые литералы имеют тип &str:

let my_slice: &str = "Hello World";

String владеет своими данными и может быть изменён, в то время как &str является ссылкой, которую нельзя изменить.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow