Rust bietet zwei Haupt-String-Typen, &str und String, die jeweils für unterschiedliche Anforderungen optimiert sind.
In diesem Tutorial lernen wir die verschiedenen String-Typen in Rust kennen, wie sie sich unterscheiden und wann sie verwendet werden sollten.
Die zwei String-Typen in Rust sind:
str (String-Slice) String str TypDer Typ str (auch als String-Slice bekannt) ist eine Art unveränderliche Zeichenkette. Es handelt sich um eine Ansammlung von Textdaten, die in der Regel durch Referenzen (&str) verwendet wird. Im Gegensatz zu String ist str eine "borrowed" (geliehene) Zeichenkette, was bedeutet, dass der Speicherort, auf den es verweist, nicht durch das str-Objekt selbst verwaltet wird.
&strfn main() {
let text: &str = "Hello, Rust!";
println!("{}", text);
}
Wichtige Eigenschaften von &str:
- Unveränderlich: Ein &str-Slice kann nicht direkt modifiziert werden.
- Borrowed (geliehen): Der Speicher, auf den ein &str verweist, wird nicht durch &str verwaltet, sondern vom Besitzer des ursprünglichen Strings.
- Effizient: Da &str unveränderlich ist und keine Speicherzuweisung erfolgt, ist es sehr speicher- und laufzeitfreundlich.
&strIn Rust sind String-Literale, wie "Hello, World!", vom Typ &str. Sie sind fest in das Programm eingebettet und somit unveränderlich.
fn main() {
let literal = "I am an immutable string slice"; // `literal` ist vom Typ `&str`
println!("{}", literal);
}
String TypDer String-Typ ist eine eigentümliche (owned) Zeichenkette, die im Heap gespeichert wird. String ist dynamisch und erlaubt es, Zeichenketten zur Laufzeit zu erstellen und zu ändern.
Stringfn main() {
let mut my_string = String::from("Hello, ");
my_string.push_str("Rust!"); // Modifiziert den String
println!("{}", my_string);
}
Wichtige Eigenschaften von String:
- Veränderlich: Ein String kann nachträglich modifiziert werden.
- Owned (Eigentümer): Der String-Typ besitzt den Speicher und verwaltet ihn automatisch (z. B. mit automatischem Speicherfreigeben via Rusts Ownership-Modell).
- Heap-gespeichert: Der Speicher wird dynamisch im Heap zugewiesen, was bedeutet, dass die Größe des Strings zur Laufzeit wachsen oder schrumpfen kann.
Es gibt verschiedene Möglichkeiten, einen String in Rust zu erstellen:
String::fromfn main() {
let s = String::from("Hello, World!");
println!("{}", s);
}
to_stringfn main() {
let s = "Hello".to_string();
println!("{}", s);
}
String erstellenfn main() {
let mut empty_string = String::new(); // Ein leerer String
empty_string.push_str("Füge Text hinzu!"); // Text hinzufügen
println!("{}", empty_string);
}
&str und StringDa &str und String unterschiedliche Eigenschaften haben, muss manchmal zwischen ihnen konvertiert werden.
&str zu StringEs gibt mehrere Möglichkeiten, ein &str in einen String zu konvertieren:
String::fromfn main() {
let s: &str = "Hello, Rust!";
let s_string = String::from(s);
println!("{}", s_string);
}
to_stringfn main() {
let s: &str = "Hello, Rust!";
let s_string = s.to_string();
println!("{}", s_string);
}
String zu &strEin String kann leicht in ein &str konvertiert werden, indem eine Referenz auf den String genommen wird:
fn main() {
let s: String = String::from("Hello, Rust!");
let s_slice: &str = &s; // Eine Referenz auf den `String`
println!("{}", s_slice);
}
&str und wann String?&str:String:
Ein umfassendes deutschsprachiges Buch für den Einstieg in Rust – mit vielen Codebeispielen und verständlichen Erklärungen.
* Dies ist ein Affiliate-Link. Wenn du über diesen Link einkaufst, erhalte ich eine kleine Provision – für dich entstehen keine zusätzlichen Kosten.