对于C#和Java开发者:
String
=== StringBuilder
&str
===(不可变的)字符串我喜欢把&str
看作是字符串的一个视图,就像Java / C#中的interned string一样,您不能更改它,只能创建一个新的。
字符串:
示例:
let s: String = String::from("Hello");
println!("{}", s);
// Output: Hello
&str(字符串片段):
示例:
fn print_length(s: &str) {
println!("Length: {}", s.len());
}
let greeting = "Hello";
print_length(greeting);
// Output: Length: 5
请记住,String和&str是相关的,但它们在Rust中有不同的用途和所有权特性。
这里有一个快速简单的解释。
String
- 一种可增长、可拥有的堆分配数据结构。它可以被强制转换为 &str
。
str
- 是(现在,随着 Rust 的发展)可变的、固定长度的字符串,它存在于堆或二进制中。你只能通过字符串切片视图,如 &str
,以借用类型的方式与 str
进行交互。
使用注意事项:
如果您想拥有或改变一个字符串,比如将字符串传递给另一个线程等,请优先选择 String
。
如果您想要一个字符串的只读视图,请优先选择 &str
。
&str
е’Ң&mut str
гҖӮиҝҷжҳҜдёӨдёӘдёҚеҗҢзҡ„дёңиҘҝгҖӮ - Tanveer Badar
&str
就像是数据的视图(切片)"时,有时候会听起来很困惑;这个图形非常清楚地展示了它。唯一这个答案没有真正帮助到的是,String
是可拥有和可变的,而&str
是不可变且非拥有的。 - dvub