let hello1 = "Hello, world!";
let hello2 = "Hello, world!".to_string();
let hello3 = String::from("Hello, world!");

推荐答案

let hello1 = "Hello, world!";

这将创建一个string slice(&str).具体来说,&'static str是一个字符串片段,在整个程序期间都有效.没有分配堆内存;字符串的数据保存在程序本身的二进制文件中.

let hello2 = "Hello, world!".to_string();

它使用格式化机制格式化实现Displayany类型,创建一个拥有的、分配的字符串(String).在Rust 1.9.0之前的版本中(特别是因为this commit),这比直接使用String::from转换要慢.在1.9.0及之后的版本中,对字符串文本调用.to_string()的速度与String::from相同.

let hello3 = String::from("Hello, world!");

这将以高效的方式将字符串片段转换为拥有的、分配的字符串(String).

let hello4 = "hello, world!".to_owned();

String::from一样.

另见:

Rust相关问答推荐

访问Rust中的隐藏变量

在自身功能上实现类似移动的行为,以允许通过大小的所有者进行呼叫(&;mut;self)?

在Rust中宏的表达式中提取对象

在跨平台应用程序中使用std::OS::Linux和std::OS::Windows

Tokio_Postgres行上未显示退回特性的生存期,且生命周期 不够长

如何在嵌套的泛型 struct 中调用泛型方法?

在 Rust 中,为什么 10 个字符的字符串的 size_of_val() 返回 24 个字节?

tokio::sync::broadcast::Receiver 不是克隆

try 从标准输入获取用户名和密码并删除 \r\n

返回迭代器考虑静态生命周期类型

如何基于常量在Rust中跳过一个测试

如何在 Rust 中显式声明 std::str::Matches<'a, P> ?

有什么方法可以通过使用生命周期来减轻嵌套生成器中的当生成器产生时borrow 可能仍在使用错误?

为什么要这样编译?

我的 Axum 处理程序无法编译:未实现 IntoResponse 特征

在 RefCell 上borrow

预期类型参数,发现不透明类型

如何从 Rust 中不同类型的多个部分加入 Path?

在同一向量 Rust 中用另一个字符串扩展一个字符串

为什么在使用 self 时会消耗 struct 而在解构时不会?