知识点
作用域
栈内存与堆内存
变量与数据的交互
移动
克隆
fn main() {
//作用域
{
// 栈内存与堆内存
let s1 = "hello"; //&str存储在栈内存,字符串字面量是不可变的,
//let mut s1 = "hello"; //即使将其类型声明为mut也无法修改
//s1 = &format!("{}{}", s1, "world"); //试图修改s1的值
let mut s2 = String::from(s1); //存储在堆内存
s2.push_str(",world");
println!("{}", s2);
}
{
// 变量与数据交互(移动)
let s1 = String::from("hello");
let s2 = s1; //所有权转移,
println!("{},world", s2); //s1的字面值被移动到s2,
//同时使第一个变量s1无效了,
//println!("{}", s1);
}
{
// 变量与数据交互(克隆)
let s1 = String::from("hello");
let s2 = s1.clone(); //使用克隆函数深度复制
println!("s1:{},world", s1);
println!("s1:{},world", s2);
}
}