==和equals()从Object类层次来看,都是比较内存地址(即,两个地址是否指向同一块存储区)。因为equals()的内部实现就是==。
下面是Object类中的equals()方法实现。
public boolean equals(Object obj) {
return (this==obj);
}
但是大多数java类都重写了Object类的equals(),使其比较存储的内容,java中String类就是非常典型的这种做法。
下面是String类equals()方法实现。

所以我们常说,==永远比较的是内存地址是否相等,equals()比较的是存储内容是否相等。
本文探讨了Java中equals方法和==操作符的区别。从Object类的角度看,两者默认比较对象的内存地址。但许多类如String重写了equals方法来比较内容而非地址。文章提供了源码级解释。

被折叠的 条评论
为什么被折叠?



