Rust從入坑到入土-入坑-String compared to str

Wo-koo發表於2021-06-14

String compared to str

Rust String

Rust str

剛接觸Rust時,可能我們對String和str之間的關係和區別不太清楚,以至於在編寫函式時不太確定要用哪種型別比較好。本文主要就這個問題進行闡述。

Rust的官方文件在String的解釋中,簡要的指明瞭Stringstr之間的關係。

String

“The String type is the most common string type that has ownership over the contents of the string. It has a close relationship with its borrowed counterpart, the primitive str.”

str

“The str type, also called a ‘string slice’, is the most primitive string type. It is usually seen in its borrowed form, &str. It is also the type of string literals, &’static str.”

上述定義的闡述可以瞭解:string是最為通用的字串型別,且對字串值具有所有權。string和其借用str有著密切的聯絡。

str我們稱之為str slicestr也是很最為原始的字串型別。我們最常見到的是其借用形式:&str。str也用來標識字串字面量:&’static str.

String是 dynamic heap 字串型別,對字串擁有所有權。而&str是一個不可變的存在於stack上的用來引用字串的slice。


fn main(){

let mut contents = String::from("hello, world"); // 在棧建立了一個String型別的變數contents,其指向堆上的一個字串

let first_word = find_first_word(&contents); // 在棧上c建立了一個&str型別的變數,指向contents所指向的字串,ptr:0,len:1

println!("contents' first word is :{0}", first_word); // 預計輸出 h

} // 回收contents所有權。first_word不具有所有權,不進行處理。

fn find_first_word(contents:&str)->&str{

&contents[0..1]

} // 無所有權,所以不對contents進行回收
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Wo-koo

相關文章