在Java语言中,==看作是基本、简单的,而equals是高级、复杂的。 ==叫做相等运算符,作用于对象时它的意义成为具体的了:判断对象的引用(地址值)是否相等。 而equals是Java中类型继承体系中的根类Object的一个方法。这个方法默认的实现为==判断; equals一般需要重载为我们的自定义实现,而不用继承而来的那个默认实现,自定义要实现的即是判断两个对象的内部数据是否相等的逻辑。 从各个方面严格来说,世界上没有两个一模一样的对象,因此在实现equals前, 必须遵守几个原则: 1.自反性 2.对称性。 3.传递性。 4.一致性。 具体内容详见JDK API文档。
class Object
{
public equals(Object other)
{
return this == other;
}
}
public Person /*extends Object*/
{
private String name;
private int age;
@Override
public int hashCode()
{ //... }
@Override
public boolean equals(Object other)
{
if (other == null)
reutrn false;
if (other != this)
return false;
return (this.hashCode() == other.hashCode() && this.name.equals(other.name) && this.age == this.age);
}
}