Rust -- 字符串

rust的字符串有两种类型: str 和 String

str 和 &str

  • str 是被编码成UTF-8的一个字节数组
  • str基本不怎么使用,更常用的是它的引用&str
  • rust中的字符串被表示为 &'static str (&表示引用,&[...]代表是一个固定大小的不可变的字符串切片。static表示是静态)。
  • 在rust中的所有""字符串都被声明成了一个不可变得、静态的变量。

String

  • String 是可变的、动态的字符串类型。它是由标准库提供的。
  • String 内部是由Vec封装的动态数组。

String 和 &str 的互相转换

let str = "hello";
// 通过to_string()方法将 &str 转换为 String
let mut y : String = str.to_string();

那么怎么将 String 转换为 &str呢,通过&*操作

fn conver(tar &str) {
  println!("convert String to &str");  
}
convert(&*y);
  • 按照rust的运算顺序,先进行解引用操作*,拿到 String 的字符数组 str,然后在通过&转化为 &str类型。
  • 由于String实现了impl Deref for String,所以可以通过* 获取一个str类型。
  • 也许使用&就能使编译通过,那是因为rust的编译器会在&后插入足够多的* 来尽可能满足Deref 这个特性,但这个特性会在某些情况下失效,因此,还是将&*写全比较好。
  • 需要知道的是,将String转换成&str是非常轻松的,几乎没有任何开销。但是反过来,将&str转换成String是需要在堆上请求内存的,因此,要慎重

你可能感兴趣的:(Rust -- 字符串)