fn main() {
// `let mut var`: mutable binding
let mut i = 5;
i = 6; // 整体替换
println!("i: i32= {}", i);
let mut s = String::from("Hi");
s = String::from("Hello"); // 整体替换
s.push_str(" World!"); // 部分修改
println!("s: String= {}", s);
// `&mut T`: mutable reference
let mut s1 = String::from("Hello");
let r1 = &mut s1;
r1.push_str(" Welcome!"); // modifying through mutable reference
println!("s1: String={}", s1);
// r1 = &mut s; // error: cannot assign twice to immutable variable `r1`
let mut r2 = &mut s1;
r2.push_str(" Have a great day!"); // modifying through mutable reference
println!("s1: String={}", s1);
let mut s2 = String::from("Test");
r2 = &mut s2; // `r2` is resigned to reference `s2`
*r2 = String::from("Goodbye!"); // equivalent to `s2 = String::from("Goodbye!")`
println!("s2: String={}", s2);
}