let hello1 = "Hello, world!";
let hello2 = "Hello, world!".to_string();
let hello3 = String::from("Hello, world!");
答案 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
相同。
另见: