equals()方法的工作原理

srk*_*srk 9 java equals

我正在深入研究Java的基础知识.我在本文中推断,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));

    }

}
Run Code Online (Sandbox Code Playgroud)

输出:
a.hashCode()97
b.hashCode()97
false
true

实际Java语言等于方法

  public boolean equals(Object obj) { 
    return (this == obj); 
  }
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,a.equals(b)返回true,意味着满足条件a == b.但那么为什么a == b在这个例子中返回false?

hashCode和地址不一样吗?另外,当我们说a == b或其他什么时,hashCode是否被比较?

NIN*_*OOP 13

Stringclass已重写该equals()方法.请遵循String#equals()文档.

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

这是默认的实现equals()Object类,String类重写了默认的实现.当且仅当参数不为null并且是表示与此对象相同的字符序列的String对象时,它才返回true.

hashCode和地址不一样吗?

不一定,为了进一步阅读hashCode().