Rust中 String、str、&str、char 的区别
  DnMsOgXyQRvq 2024年08月07日 95 0

先上结论

  • 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);
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月07日 0

暂无评论

推荐阅读
  Zq77RPSHuidF   2024年04月27日   103   0   0 Rust
  qn1eRyGNKz7T   2024年03月07日   132   0   0 Rust
  qn1eRyGNKz7T   2024年03月19日   277   0   0 Rust
  qn1eRyGNKz7T   2024年02月29日   174   0   0 Rust
  nciPP1FRH5QS   2024年08月14日   41   0   0 Rust
  qn1eRyGNKz7T   2024年03月25日   177   0   0 Rust
  qn1eRyGNKz7T   2024年04月01日   326   0   0 Rust
  slt0fBKTgQt8   2024年08月07日   65   0   0 Rust
  qn1eRyGNKz7T   2024年03月13日   210   0   0 Rust
  6m3lfiEqOqHp   2024年08月07日   42   0   0 Rust
  3Vc6H13Lg7Nk   2024年04月28日   84   0   0 Rust
DnMsOgXyQRvq