Equals()方法的工作原理

2022-05-16 00:00:00 equals java

我正在深入研究Java的基础知识。我从this article推断,Java‘equals’方法意味着,如果两个对象相等,则它们必须具有相同的hashCode()。

这是我的示例。

public class Equals {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String a = new String("a");
        String b = new String("a");
        System.out.println("a.hashCode() "+a.hashCode());
        System.out.println("b.hashCode() "+b.hashCode());
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }

}

输出:

A.hashCode()97
B.hashCode()97
FALSE

实际的Java语言‘equals’方法:

  public boolean equals(Object obj) {
    return (this == obj);
  }

在上面的示例中,a.equals(B)返回了TRUE,这意味着满足条件‘a==b’。但为什么在该示例中‘a==b’返回FALSE?

hashCode和Address不是一样的吗?另外,当我们说‘a==b’或其他词时,会比较‘hashCode’吗?


解决方案

String类已重写equals()方法。请按照String equals()文档进行操作。

a.equals(B)已返回True,表示条件a==b满足

这是Object类中equals()的默认实现,String类已覆盖默认实现。当且仅当参数不为空并且是表示与此对象相同的字符序列的字符串对象时,它才返回True。

hashCode和Address不是一个吗?

不一定。有关hashCode()的进一步阅读。

相关文章