字符串是在任何编程语言中最常用的数据类型之一。在 Rust 中,它们通常以两种形式出现:&str
类型和 String
类型。Rust 字符串保证是有效的 UTF-8 编码字节序列。它们不像C字符串那样以空值(NULL)终止,并且可以在字符串之间包含空的字节。
在上述代码中,
fn main() {
let qurstion = "How are you ?";
let person: String = "Bob".to_string();
let namaste = String::from("عربي/عربى");
println!("{}!{}{}",namaste,qurstion,person);
}
<font style="color:rgb(77, 81, 86);">person</font>
和 <font style="color:rgb(77, 81, 86);">namaste</font>
的类型为 <font style="color:rgb(77, 81, 86);">String</font>
,而 <font style="color:rgb(77, 81, 86);">question</font>
的类型为 <font style="color:rgb(77, 81, 86);">&str</font>
。创建 <font style="color:rgb(77, 81, 86);">String</font>
类型数据的方法有很多种。<font style="color:rgb(77, 81, 86);">String</font>
类型数据是在堆上分配的,<font style="color:rgb(77, 81, 86);">&str</font>
类型数据通常是指向现有字符串的指针,这些字符串可以在堆栈和堆上,也可以是已编译对象代码的数据段中的字符串。<font style="color:rgb(77, 81, 86);">&</font>
是一个运算符,用于创建指向任何类型的指针。在初始化前面代码中的字符串后,我们使用 pintln! 宏通过格式化字符串将它们一起输出。这些事最基本的字符串知识。这些是基本的字符串知识,后续会详细学习。
String
- 存储方式:String 是一个堆分配的字符串类型,它可以存储可变长度的文本。String 在堆内存中保存数据,这意味着它可以在运行时扩展或缩小其大小。
- 可变性:String 是可变的,你可以增加、修改或删除其内容。
- 使用场景:当你需要拥有字符串数据的所有权,或者需要修改字符串内容时,使用 String 是更合适的选择。
&str
- 存储方式:&str 通常被称为字符串切片(string slice),它是一个对某个 String 中一部分或全部数据的不可变引用。&str 类型的数据通常存储在程序的二进制文件中或者是 String 类型的引用。
- 可变性:&str 是不可变的,一旦创建,你不能修改其内容。
- 使用场景:当你只需要借用字符串数据,不需要拥有数据的所有权,或者不需要修改字符串内容时,使用 &str 是更合适的。由于 &str 是轻量级的,它被广泛用作函数参数类型,以避免不必要的数据拷贝。
- String 是一个动态、可变、拥有所有权的堆分配字符串类型,适用于需要修改字符串或拥有字符串所有权的场景。
- &str 是一个固定大小、不可变的字符串切片,它是对某个字符串数据的引用,适用于不需要所有权或不需要修改字符串的场景,是函数参数的理想选择,因为它避免了数据的拷贝。