所有权
基础
所有权
堆
可变, 可增长
需要在堆上分配一块在编译时未知大小的内存来存放内容
必须在运行时向内存分配器请求内存。
离开作用域后就被自动释放
建议使用场景: 结构体
let s1 = String::from("hello");
let s2 = s1;
// 这时s1将无效
// s1与s2只是在栈上的 指针 长度 容量 数据是两份 但指向的是相同堆, Rust为了防止s1被回收而影响s2或造成重复回收而污染内存 所以s2被定义后s1将无效
字面量
栈
编译时就知道其内容, 快速且高效, 不可变性
包含: &str 整型 浮点型 Bool char 数组元组 等
建议场景: 函数参数
// 会真正拷贝数据
let a:i32 =1;
let b:i32 = a;
引用
解引用
解引用运算符(*)获取 i 中的值
let mut v = vec![100, 32, 57];
for i in &mut v {
*i += 50;
}