Warum hat Rust sowohl String
als auch str
? Was sind die Unterschiede zwischen ihnen und wann sollte man eine gegenüber der anderen verwenden? Wird eine von ihnen veraltet?
Antworten
Zu viele Anzeigen?In Rust ist str ein primitiver Typ, der eine Sequenz von Unicode-Codepunkten darstellt, auch bekannt als ein String-Slice. Das bedeutet, dass es sich um eine schreibgeschützte Ansicht in einen String handelt und es den Speicher, auf den es zeigt, nicht besitzt. Auf der anderen Seite ist String ein erweiterbarer, veränderlicher String-Typ im Besitz. Das bedeutet, dass wenn Sie einen String erstellen, er Speicherplatz im Heap reserviert, um den Inhalt des Strings zu speichern, und diesen Speicherplatz freigibt, wenn der String außerhalb seines Gültigkeitsbereichs liegt. Da String erweiterbar und veränderlich ist, können Sie den Inhalt eines Strings ändern, nachdem Sie ihn erstellt haben.
Allgemein wird str verwendet, wenn Sie auf ein String-Slice verweisen möchten, das in einer anderen Datenstruktur wie einem String gespeichert ist. String wird verwendet, wenn Sie einen Stringwert erstellen und besitzen möchten.
String:
- Ein String ist eine dynamische, heap-allocierte, erweiterbare Sequenz von Zeichen.
- Wird zum Speichern und Manipulieren von Textdaten verwendet, die sich in der Größe ändern können.
- Stellt im Besitz befindliche Zeichendaten dar.
Beispiel:
let s: String = String::from("Hallo");
println!("{}", s);
// Ausgabe: Hallo
&str (String Slice):
- Ein &str ist eine unveränderliche Referenz auf eine Sequenz von Zeichen (eine Slice), die im Speicher gespeichert ist.
- Wird verwendet, um mit Zeichendaten zu arbeiten, ohne den Besitz zu übernehmen.
- Kann mit Zeichenkettenliteralen verwendet oder von String ausgeliehen werden.
Beispiel:
fn print_length(s: &str) {
println!("Länge: {}", s.len());
}
let begrüßung = "Hallo";
print_length(begrüßung);
// Ausgabe: Länge: 5
Beachten Sie, dass String und &str in Rust verwandt sind, aber unterschiedliche Zwecke haben und unterschiedliche Besitzeigenschaften aufweisen.
Hier ist eine schnelle und einfache Erklärung.
String
- Eine skalierbare, besitzbare, heap-allokierte Datenstruktur. Es kann zu einem &str
gezwungen werden.
str
- ist (jetzt, da sich Rust weiterentwickelt) eine veränderliche, festlängige Zeichenkette, die im Heap oder in der binären Datei existiert. Sie können nur mit str
als ausgeliehenem Typ über einen Zeichenslice-View, wie &str
, interagieren.
Verwendungserwägungen:
Bevorzugen Sie String
, wenn Sie eine Zeichenkette besitzen oder verändern möchten - z.B. wenn Sie die Zeichenkette an einen anderen Thread übergeben möchten, etc.
Bevorzugen Sie &str
, wenn Sie eine schreibgeschützte Ansicht einer Zeichenkette haben möchten.
- See previous answers
- Weitere Antworten anzeigen