Menu
Coddy logo textTech

String vs. &str

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 54 de 66.

Rust possui dois tipos principais de strings que servem a propósitos diferentes: String e &str. Entender a diferença entre eles é crucial para trabalhar de forma eficaz com texto em Rust.

Uma String é uma string de propriedade (owned), alocada na heap, que você pode modificar. Quando você cria uma String, seu programa detém a propriedade desses dados e é responsável por gerenciar sua memória. Você pode aumentá-la, diminuí-la e alterar seu conteúdo porque ela é mutável quando declarada com mut.

let mut my_string = String::from("Hello");
my_string.push_str(" World"); // Isso funciona porque a String possui propriedade e é mutável

Em contraste, &str (pronunciado "string slice") é uma visão emprestada e imutável de dados de string. Ele não é o dono dos dados para os quais aponta - é apenas uma referência a algum conteúdo de string que existe em outro lugar. Literais de string como "Hello" são, na verdade, do tipo &str.

let my_slice: &str = "Hello World"; // Isso é um slice de string

Pense no String como ser o dono de um livro no qual você pode escrever e modificar, enquanto o &str é como pegar o livro de outra pessoa emprestado - você pode lê-lo, mas não pode alterá-lo. Essa distinção é fundamental para o sistema de ownership do Rust e ajuda a garantir a segurança de memória.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Folha de consulta

Rust possui dois tipos principais de string:

  • String - string de posse (owned), alocada na heap e mutável
  • &str - fatia de string emprestada (borrowed) e imutável (referência a dados de string)

Criando uma String:

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

Literais de string são do tipo &str:

let my_slice: &str = "Hello World";

A String é dona de seus dados e pode ser modificada, enquanto &str é uma referência que não pode ser alterada.

Experimente você mesmo

Esta lição não inclui um desafio de código.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow