Rust中 String、str、&str、char 的区别
先上结论
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); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇