```
fn main(){
let a = Box::new(10);
assert_eq!(10, a); //This wont work
// assert_eq!(10, *a); //This will work
let c = String::from("hai");
assert_eq!("hai", c); // this will work
}
```

The string comparison works because `impl<'a> PartialEq<String> for &'a str`

exists.

If it didn't, then you would need to first convert the `String`

into a `&str`

before you could compare them.

6 Likes

What is comparable through box/reference is a bit ad-hoc in Rust.

```
fn main() {
let boxed: Box<str> = "nope".into();
assert_eq!(boxed, "nope"); // this doesn't work either
assert_eq!(*boxed, "nope"); // still wrong
assert_eq!(&*boxed, "nope"); // that works
}
```

1 Like