I'm new to Rust and trying to learn how references work. In the following code when I want to do a calculation on a1
which is i32
I don't have to dereference it. But with b1
which is a Box
, I have to dereference it.
Actually both let a2 = a1 * 2;
and let a3 = *a1 * 2;
behave similarly. It looks like dereferencing in primitives is optional OR the compiler is implicitly doing that for us.
fn main(){
let a = 5;
let b = Box::new(10);
let a1 = &a;
let b1 = &b;
println!("{} {}", a1, b1);
let a2 = a1 * 2;
let b2 = (**b1) * 10;
let a3 = *a1 * 2;
println!("{} {} {}", a2, a3, b2);
}
Can someone please explain this functionality?