当 x 和 y 是引用时,为什么 `x + y` 和 `*x + *y` 给出相同的结果?

Avi*_*ava 3 rust

我必须实现一个将两个数字相加的函数:

fn add(x: &i32, y: &i32) -> i32 {
    println!("x is: {}, y is {}", x, y);
    println!("*x is: {}, *y is {}", *x, *y);
    x + y
}

fn double(x: i32) -> i32 {
    add(&x, &x)
}

fn main() {
    assert_eq!(double(5), 10);
    println!("Success!");
}
Run Code Online (Sandbox Code Playgroud)

输出是:

x is: 5, y is 5
*x is: 5, *y is 5
Success!
Run Code Online (Sandbox Code Playgroud)

根据我的理解,该add函数不应该能够执行,x+y因为它们都是地址。仅*x + *y当它取消引用地址并提供存储在那里的值时才应该起作用。然而,这两个语句产生相同的结果。这是为什么?