默认的equals()方法只有等两个引用都是引用同一个对象的时候才是true,一般情况下我要使用这个方法就得覆盖了那个Object类的equals()方法。
默认情况下:
MyClass m = new MyClass();
MyClass b = m;
System.out.println(m.equals(b));这时候是ture.
也就是this==obj;覆盖了这个方法和自定义相等条件一样。
比如说有个类Person,有一个name属性,我们可以写自己的相等条件,也就是如果比较的对象和name和当前的对象的name一样的时候就认为这两个对象相等。
Person
{
String name ;
public boolean equals(Object obj)
{
//判断obj是不是Person对象,如果不是的话就没有比较的意义了。如果你非要比较也是可以的。
//然后用this.name和((Person)obj).getName();比如,如果相同就返回true,不相同就返回false
return this.getName().equals(((Person)obj).getName();)
}
}
从中看错equals的原理:自定义比较的规则。Object类里的equals()方法只是简单的比较一个是否引用自对一个对象。
举一反三:
还有另一个属性int age;
自定义规则:name和age都相同才是相等。
Person
{
String name ;
int age;
//getter/setter方法
public boolean equals(Object obj)
{
//判断obj是不是Person对象,如果不是的话就没有比较的意义了。如果你非要比较也是可以的。
//然后用this.name和((Person)obj).getName();比如,如果相同就返回true,不相同就返回false
if( this.getName().equals(((Person)obj).getName() && this.getAge()==(((Person)obj).getAge() )
{
return true;
}
else
{
return false;
}
}
}