在定义类时,何时需要重写Object类中equals()方法?

在比较两个对象时可以使用==和 equals()。==用于比较两个对象的引用地址是否相等,而equals()方法主要用于比较两个对象的内容是否相等。和equals()的差别请参见“和equals()有什么区别?”的解答。
在 Object 中已定义了 equals()方法,但是该方法直接采用
操作符实现,因此子类如果不重写该方法,那么子类对象在比较时将使用 Object 中定义的 equals(),其结果与
操作符的比较结果是一样的。
在Java API 中,有很多常用类都重写过equals()方法,例如String、Integer 和Double 等,使用equals()方法可以很方便地比较这些对象的内容是否相等。因此为了方便比较类对象内容是否相等,在定义类时一般都建议重写equals()方法。
重写equals()方法的示例代码如下:
public class Person
{
//编号
private String id;
//姓名
private String name;
//覆盖equals()方法
public boolean equals(Object obj)
{
//判断obj是否为null,如果为null,返回false
if (obj = = null)
{
return false;
}
//判断测试的是否为同一个对象,如果是同一个对象返回true
if(this == obj)
{
return true;
}
//判断它们的类型是否相等,如果不相等返回false
if(this.getClass()!= obj.getClass())
{
return false;
}
//将参数中传入的对象造型为Person类型
Person c = (Person)obj;
return id.equals(c.id) && name.equals(c.name);
}
}
注意:在重写equals()方法的同时,一般都相应地重写hashCode()方法

猜你喜欢

转载自blog.csdn.net/weixin_42470710/article/details/85934314
今日推荐