String是一种动态的heap字符串类型类似于Vec,当你想要更改或创造字符串数据的时候就可以使用它。

str是内存中某个位置的一个动态长度UTF-8编码的不可变序列。因为大小未知,所以只可以通过指针操作。也就是说大多数情况下以&str出现。实际也就是一种UTF-8数据的引用,称作字符串切片或切片。

字符串切片可以看作一些数据的视图,这些数据可以出现在任何地方,比如,

  1. 静态存储
  2. 栈中
  3. 堆中

总的来说,如果需要创建字符串数据,可以使用String(比如将字符串传递给其他线程,或者在运行时构建它们),如果只需要字符串的视图,可以使用&str。

这与Vec和&[T]之间的关系是相同的,并且与一般类型的T和&T之间的关系是相似的。