这三种在Rust中声明字符串的方法有什么区别?

时间:2016-05-10 22:11:30

标签: string rust

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

1 个答案:

答案 0 :(得分:10)

let hello1 = "Hello, world!";

这会创建一个字符串切片&str)。具体来说,是&'static str,一个在整个程序期间存在的字符串切片。没有分配堆内存;字符串的数据存在于程序本身的二进制文件中。

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

这使用格式化机制来格式化实现Display任何类型,从而创建一个拥有的,已分配的字符串(String)。在1.9.0之前的Rust版本中(特别是因为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相同。

另见: