面试题答案
一键面试存储结构差异
String
:String
是可增长、可变的字符串类型,它在堆上分配内存。- 其内部包含一个指向堆上数据的指针、长度和容量信息。长度表示当前字符串的有效字符数量,容量表示当前分配的内存空间可容纳的字符数量(可能大于实际长度)。
&str
:&str
是字符串切片,是一个指向UTF - 8编码字符串数据的不可变引用。- 它本身不拥有数据,只是一个指向已有字符串数据的指针和长度信息,数据可以在栈上(如字符串字面量)或堆上。
使用场景
- 优先使用
String
的场景:- 当需要对字符串进行修改操作,如追加字符、删除字符等。例如,在解析用户输入并动态构建字符串时。
- 当需要拥有字符串的所有权,例如将字符串传递给函数并且该函数需要拥有该字符串的所有权来进行后续处理。
- 优先使用
&str
的场景:- 当只需要读取字符串内容,不需要修改,并且希望避免所有权转移时。例如,函数参数只需要读取字符串,这样可以减少不必要的内存复制和所有权转移开销。
- 处理字符串字面量时,字符串字面量本身就是
&str
类型,直接使用&str
更自然且高效。