MST

星途 面试题库

面试题:Rust中str类型与String类型的主要区别及转换方式

在Rust中,str类型和String类型都用于处理文本数据,请阐述它们之间的主要区别,并说明如何在两者之间进行相互转换。
19.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

区别

  1. 所有权与可变性
    • String 是拥有所有权的可变类型。它在堆上分配内存,并且可以通过修改其内部数据结构来改变内容。例如,可以使用 push_str 方法向 String 中追加字符串。
    • str 是一个切片类型,通常以 &str 的形式出现(字符串字面量就是 &str 类型)。它本身并不拥有数据,而是借用其他数据的一部分,不可变。&str 指向的内存是只读的。
  2. 内存管理
    • String 负责分配和释放内存。当 String 离开作用域时,它所占用的堆内存会被自动释放。
    • &str 不负责内存管理,它只是一个指向现有字符串数据的指针,因此它的生命周期依赖于它所指向的数据的生命周期。
  3. 存储方式
    • String 在堆上存储文本数据,同时在栈上存储一个指向堆内存的指针、长度和容量信息。
    • &str 在栈上存储一个指向字符串数据的指针和长度信息,它不包含容量信息,因为它不拥有数据,不能对数据进行扩展。

相互转换

  1. &str 转换为 String
    • 可以使用 to_string 方法:
let s1: &str = "hello";
let s2: String = s1.to_string();
  • 也可以使用 String::from 函数:
let s1: &str = "world";
let s2: String = String::from(s1);
  1. String 转换为 &str
    • 可以使用 as_str 方法:
let s1: String = "rust".to_string();
let s2: &str = s1.as_str();