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.