Rust中 String、str、&str、char 的區別

azoux發表於2024-07-10

先上結論

  • String 是動態分配在堆上的可變長度字串型別。
  • str 是字串切片型別,通常以 &str 的形式出現,用於引用字串字面量或 String 的一部分。
  • &str 是字串字面量的型別,以雙引號建立,通常用於傳遞字串資料的引用。
  • char 是單個 Unicode 字元型別,以單引號建立,用於表示單個字元。

String

String 是 Rust 中的可變長度字串型別,它允許動態增長和修改。String 型別的資料儲存在堆上,因此它們能夠在執行時根據需要分配或釋放記憶體。String 型別實現了 Deref<Target=str>,因此可以直接當作 &str 使用。

示例程式碼:

// 建立一個空的 String
let mut s = String::new();

// 從字串字面量建立 String
let data = "initial contents";
let s = data.to_string(); // 或者 let s = String::from(data);

// 追加字串
s.push_str(" more content");

// 新增單個字元
s.push('!');

println!("{}", s); // 輸出: initial contents more content!

str

str 是 Rust 中的字串切片型別,它通常以不可變引用 &str 的形式出現。str 型別通常用於指向字串字面量或 String 的部分內容,它儲存在程式的靜態儲存區或堆上(當作 &str 時)。

示例程式碼:

// 字串字面量是 &str 型別
let hello: &str = "Hello, world!";

// 從 String 獲取 &str
let s = String::from("Hello");
let slice: &str = &s;

// 使用 &str 引數的函式
fn takes_slice(slice: &str) {
    println!("Got slice: {}", slice);
}
takes_slice("Hello");

&str

&str 表示對字串的引用,通常用於函式引數和字串切片操作。它是 Rust 中常見的用於傳遞字串資料的方式,因為它不需要擁有字串的所有權,而是簡單地借用它。

示例程式碼:

// &str 作為函式引數
fn print_length(s: &str) {
    println!("Length of '{}' is {} bytes", s, s.len());
}
let message = "hello";
print_length(message);

// 字串切片操作
let s = "abcdef";
let slice = &s[1..4]; // 切片操作,獲取部分字串
println!("{}", slice); // 輸出: bcd

char

char 表示 Rust 中的單個字元,它使用單引號 ' 包裹。在 Rust 中,字元是 Unicode 標量值,每個字元佔用 4 位元組。char 型別提供了對單個字元的處理和操作能力。

示例程式碼:

// 建立單個字元
let c: char = 'a';

// 遍歷字串中的字元
for c in "hello".chars() {
    println!("{}", c);
}

// 判斷字元是否是數字
let c = '7';
if c.is_digit(10) {
    println!("'{}' is a digit", c);
}

相關文章