String is considered one of the 'Value' classes (not sure if that's my term or if I picked it up somewhere). This includes all the primitive wrapper classes and String. They share some characteristics.
They are all immutible. They all override equals, hashCode, and toString. I think they also have some other common methods.
To my knowledge no other class in the standard API overrides equals. I could be wrong here, but I think that's right.