Rust 两个参考变量怎么可能相等?

Rust 两个参考变量怎么可能相等?,rust,Rust,我有一个代码,其中一个函数中有一个bug: fn is_five(x: &i32) -> bool { x == 5 } fn main() { assert!(is_five(&5)); assert!(!is_five(&6)); println!("Success!"); } 运行时,错误为: error[E0277]: can't compare `&i32` with `{integer}`

我有一个代码,其中一个函数中有一个bug:

fn is_five(x: &i32) -> bool {
    x == 5
}

fn main() {
    assert!(is_five(&5));
    assert!(!is_five(&6));
    println!("Success!");
}
运行时,错误为:

error[E0277]: can't compare `&i32` with `{integer}`
 --> main.rs:2:7
  |
2 |     x == 5
  |       ^^ no implementation for `&i32 == {integer}`
  |
  = help: the trait `std::cmp::PartialEq<{integer}>` is not implemented for `&i32`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0277`.
然而,我也尝试(随机)使用借用方法,令我惊讶的是,它奏效了

fn is_five(x: &i32) -> bool {
    x == &5
}

我不明白两个地址怎么可能相同?是不是
=
运算符具有某种特性,可以将值存储在两端?

为了能够执行
=
,必须实现
PartialEq
。如果您检查,您会发现如果类型
a
实现
PartialEq
,那么
&“a
实现
PartialEq”如果您可以比较值,那么您可以比较它们的指针”有点误导,因为在编写
x=&5
时,并不是要比较的指针,这是它们指向的值。@user4815162342是的,你是对的。我会更清楚地写“如果你可以比较值,你可以使用指向它们的指针来比较它们”。也就是说,定义值之间的偏序关系意味着指向该值的指针上的偏序关系,这并不是错误的。感谢您的澄清。请注意,您不是在比较指针,而是在比较引用@谢谢你的更正。对于其他发现区别不明确的用户,这里有一些更多的信息:您可以使用来比较指针而不是值,以防万一您需要它。
fn is_five(x: &i32) -> bool {
    x == &5
}