小能豆

Rust 的 `String` 和 `str` 有什么区别?

rust

为什么 Rust 同时具有String和str?它们之间有什么区别,什么时候应该使用其中一种而不是另一种?其中之一是否已被弃用?


阅读 170

收藏
2024-05-21

共1个答案

小能豆

在 Rust 中,Stringstr 都用于表示文本数据,但它们具有不同的特性和用法。

  1. String
  2. String 是一个可增长的、在堆上分配的数据结构,表示 UTF-8 编码的字符串。
  3. 它是拥有和可变的,意味着它可以被修改和调整大小。
  4. 它提供了用于操作和处理字符串的方法,例如连接、提取子串和迭代字符。
  5. 当您需要创建、修改或拥有字符串数据时通常会使用它。
  6. 示例:
    rust let mut s = String::new(); s.push_str("hello"); s.push(' '); s.push_str("world");

  7. str

  8. str 是对 UTF-8 字节序列的不可变视图,通常是一个切片(&str)或引用(&'a str)到现有字符串。
  9. 它不是所有权的,不能直接修改。
  10. 它表示对由其他人拥有的数据的视图,例如 String、字符串字面量或较大字符串的切片。
  11. 当您需要引用现有字符串而不需要获取所有权时通常会使用它。
  12. 示例:
    ```rust
    fn print_str(s: &str) {
    println!(“{}”, s);
    }

    let s: &str = “hello”;
    ```

  13. 区别和用法

  14. String 是一个拥有其数据并且可变的类型,而 str 是一个借用的类型,它引用由其他东西拥有的数据并且是不可变的。
  15. 当您需要拥有和修改字符串时使用 String,当您需要引用现有字符串而不需要获取所有权时使用 str
  16. String 常用于需要转移所有权或需要动态字符串操作的 API 中,而 str 常用于函数签名、数据结构和其他上下文中,其中借用是足够的。

  17. 弃用

  18. 目前没有计划弃用 Stringstr 中的任何一个。
  19. 这两种类型具有不同的用途,并且是 Rust 语言中文本处理能力的重要组成部分。
  20. 在它们之间的选择取决于代码的具体要求和您需要实现的所有权语义。
2024-05-21