Rust(13):字符串类型

今天学习的内容是 Rust 中的字符串类型

字符串类型是一个非常基础和重要的数据类型。

Rust 中表示字符串类型的方式有多种,和其他语言有很大的区别。本文讲述最常用的两种,分别是 &strString 类型。

创建字符串

&str

直接使用字符串字面量创建的字符串,属于 &str 字符串引用类型。

let s = "hello world";

编译器会自动推断出变量 s&str 类型:

image-20220928084152821

字符串引用类型的内容保存在数据段中。数据段可以理解为一个 存储数据且数据不发生改变 的区域。比如示例中这个字符串值,在程序的运行过程中是不会发生改变的。

String

有多种方式定义 String 类型的字符串,最常用的是使用 String::from 方法。

let str = String::from("hello world");

image-20220928085534240

还可以使用 String::new 方法,它创建一个空的 String 类型的字符串:

 let _str2 = String::new(); // 不能接收参数

String 类型的字符串,具有所有权,存在堆内存中。而上面 &str 类型的字符串只是一个引用,不存在所有权。

代码中使用字符串

在给函数传参时,一种约定俗成的惯用的方式是:如果参数是字符串类型,参数类型定义为字符串的引用类型。这样在调用函数时,即可以传递字符串引用,也可以使用使用 & 运算符来传递一个 String 类型的字符串。

fn echo (s: &str) {
 println!("{:?}", s);
}

fn main() {
 let s = "hello";
 let t = String::from("world");
    
 echo(s);
 echo(&t);
}

定义结构体时,成员如果是字符串类型,要使用 String 类型:

因为定义结构体时,并不知道该成员的值的大小,只能在将来赋值时动态创建一个字符串值。

struct User {
  // 错误的
  // name: &str, 

  // 正确的
  name: String
}

小结

本文介绍了 Rust 中的字符串类型。不像其他语言中的字符串,它涉及到底层的内存分配的知识,初学不太容易理解。可以通过使用场景进行简单的划分,比如在函数传参时通常使用 &str 引用类型,在定义结构体时会使用 String 类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昆吾kw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值