如何创建Rust字符串字面量?不同创建方式有何差异?
Rust中几种字符串创建方式的区别
下面逐一说明四种写法的核心区别:
let str = "Hello, world!";- 类型为
&'static str(静态字符串切片),存储在程序的只读数据段,无需堆内存分配。 - 拥有
'static生命周期,在程序运行全程有效。 - 不可变,无法修改内部字符内容。
- 类型为
let str = String::from("Hello, world!");- 创建的是
String类型——堆分配的可变字符串。 - 直接通过
String的关联函数完成转换,内部会将字面量内容复制到新分配的堆内存中。
- 创建的是
let str = "Hello, world!".to_owned();- 同样生成
String类型,基于ToOwnedtrait实现。 ToOwned是通用 trait,除了&str,切片&[T]也能通过它生成Vec<T>,通用性更强。对&str而言,其效果和String::from几乎无差异。
- 同样生成
let str = "Hello, world!".to_string();- 生成
String类型,基于ToStringtrait实现。 - 内部本质调用的是
String::from,最终效果和String::from完全一致,只是写法更适配通用场景——任何实现Displaytrait的类型都能调用to_string()转换为字符串。
- 生成
内容的提问来源于stack exchange,提问作者Heineken
相关产品推荐
相关产品推荐

