Avatar ·

Was ist der Unterschied zwischen String und str in Rust? Wann verwendet man was?

Hallo Kollegen! Ich habe angefangen, Rust zu lernen und bin auf ein sehr verwirrendes Thema gestoßen — Strings. In der Dokumentation tauchen ständig `String` und `&str` auf, aber ich kann nicht verstehen, was der Unterschied zwischen ihnen ist und wann welcher Typ verwendet werden soll. Ich habe ein kleines Beispiel geschrieben: ```rust fn main() { let s1 = "hello"; // ist das str? let s2 = String::from("hello"); // und das ist String? println!("{}", s1); println!("{}", s2); // Warum funktioniert das? let s3: &str = &s2; println!("{}", s3); // Und das nicht? // let s4: String = s1; // Fehler! } ``` Ich sehe, dass `s1` ein String-Literal ist und `s2` über `String::from()` erstellt wird. Aber wenn ich versuche, `s1` einer Variable vom Typ `String` zuzuweisen, beschwert sich der Compiler. Dabei kann ich einen Verweis auf `s2` nehmen und ihn einer Variable vom Typ `&str` zuweisen.