【Rust】 2. 数据类型笔记

一、类型系统概述

Rust 是静态类型语言,所有变量类型在编译时就必须确定。

静态类型 vs 动态类型
特性 静态类型语言 动态类型语言
类型检查时机 编译时期 运行时期
性能 更好(无运行时类型检查开销) 较差(需要运行时类型检查)
类型声明 需要显式声明 不需要显式声明
例子 Java, C++, Rust Python, JavaScript

二、数据类型分类

  1. 标量类型(Scalar)

单个值类型

1.1 整型(Integer)

  • 有符号:i8, i16, i32, i64, i128, isize

  • 无符号:u8, u16, u32, u64, u128, usize

  • 默认类型:i32

字面量表示:

rust 复制代码
let decimal = 98_222;    // 十进制
let hex = 0xff;          // 十六进制
let octal = 0o77;        // 八进制
let binary = 0b1111_0000;// 二进制
let byte = b'A';         // 字节(u8)

整数溢出处理:

  • debug模式:panic

  • release模式:自动舍弃高位

  • 可用方法显式处理:wrapping_, checked_, overflowing_, saturating_

1.2 浮点型(Float)

  • f32:32位单精度

  • f64:64位双精度(默认类型)

注意: 浮点数是近似值,避免直接相等性比较

1.3 布尔型(Boolean)

  • 值:true/false

  • 大小:1字节

  • 用于逻辑运算和条件判断

1.4 字符型(Character)

  • 类型:char

  • 大小:4字节(Unicode标量值)

  • 单字节字符:使用u8类型和b前缀

1.5 序列(Range)

rust 复制代码
1..5    // 1到4(不包含5)
1..=5   // 1到5(包含5)
  1. 复合类型(Compound)

组合多个值为一个类型

2.1 元组(Tuple)

  • 固定长度

  • 可包含不同类型

  • 访问方式:模式匹配解构 或 数字索引

rust 复制代码
let tup = (500, 6.4, 1);
let (x, y, z) = tup;  // 解构
let five_hundred = tup.0;  // 索引访问

2.2 数组(Array)

  • 固定长度
  • 元素类型必须相同
  • 访问方式:下标索引 或 get()方法
rust 复制代码
let a = [1, 2, 3, 4];
let first = a[0];           // 索引访问
let first = a.get(0);       // 返回Option类型

2.3 结构体(Struct)

三种形式:

  • 具名结构体:struct Point { x: i32, y: i32 }

  • 元组结构体:struct Color(i32, i32, i32);

  • 单元结构体:struct Unit;

  1. 枚举(Enum)

表示"或"关系,可包含不同类型数据

rust 复制代码
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
  1. 特殊类型
  • Never类型:!,表示不可能返回的值(目前不稳定)

三、类型选择原则

  1. 理解数据特性:值范围、是否需要小数、是否可变等

  2. 选择最小合适类型:节省内存,提高性能

  3. 平衡类型安全与灵活性

  4. 考虑数据可变性需求

  5. 利用复合类型组织复杂数据

  6. 进行充分测试验证

四、常见错误

  1. 类型转换需要显式声明
rust 复制代码
let var1: i8 = 1;
let var2: i32 = var1 as i32;  // 需要as关键字
  1. 复合数据类型不允许直接嵌套
rust 复制代码
// 错误示例
struct Node {
    data: i32,
    next: Node,  // 不允许直接嵌套
}

五、总结

Rust的类型系统设计强调安全性和性能:

  • 静态类型检查在编译期捕获错误

  • 丰富的标量和复合类型满足各种需求

  • 明确的类型转换规则防止隐式错误

  • 内存安全的设计避免常见编程错误

选择合适的数据类型需要综合考虑数据的特性、内存使用、性能需求和代码可维护性等因素。

相关推荐
PPPPickup4 分钟前
easychat---创建,获取,获取详细,退群,解散,添加与移除群组
java·开发语言·后端·maven
摇滚侠33 分钟前
2025最新 SpringCloud 教程,熔断规则-熔断策略-异常数,笔记46
java·笔记·spring cloud
摇滚侠35 分钟前
2025最新 SpringCloud 教程,熔断规则-熔断策略-慢调用比例,笔记44
java·笔记·spring cloud
liulilittle1 小时前
C++ 并发双阶段队列设计原理与实现
linux·开发语言·c++·windows·算法·线程·并发
ECC&SM91 小时前
shell脚本使用笔记2
笔记
lly2024061 小时前
并查集快速查找
开发语言
繁星蓝雨1 小时前
我与C++的故事(杂谈)
开发语言·c++
除了代码啥也不会1 小时前
Java基于SSE流式输出实战
java·开发语言·交互
Jacob程序员1 小时前
欧几里得距离算法-相似度
开发语言·python·算法
Slow菜鸟1 小时前
Java项目基础架构(二)| 通用响应与异常
java·开发语言