我正在深入研究 Java 的基础知识。我从 this article 推断,Java 的“等于”方法意味着,如果两个对象相等,则它们必须具有相同的 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
假的
是的
实际的 Java 语言“等于”方法:
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
类已经覆盖了默认实现。当且仅当参数不为 null 并且是表示与此对象相同的字符序列的 String 对象时,它才返回 true。
hashCode 和地址不是一回事吗?
不一定。如需进一步阅读 hashCode() .
关于java - equals() 方法的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16089282/