主要观点:工程师在采用 Rust 时,常对&str
和String
感到困惑,两者在不同情境下使用,有最优选择。
关键信息:
&str
是引用,不拥有字符串内存,大小固定可存于栈,只能在源存活时存在,能转换为String
。Vec
与slice
也有类似情况。- 函数参数:一般接受
&str
更宽容,若需String
可接受impl Into<String>
。 - 函数返回值:两种情况返回
&str
,否则返回String
。 - 结构体字段:嵌入
&str
需与&str
来源相关,可提高效率。
重要细节: String
有Deref<Target = str>
实现,可转换为&str
。Into<String>
接口允许传入String
或&str
,传入String
时.into()
可优化。- 编译器在合适时会强制返回
String
。 - 结构体字段中需明确生命周期,
SubstringMatch
结构只能在&str
存活时存在,避免原始字符串被修改。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。