java equals方法的重写

在重写object类的equals()方法时总是会有几个小困惑,今天博主就写一篇博客来巩固一下,希望也能帮到你们。

首先需要强调的一点是,在object类中equals()方法和==的作用是一样的,我们来看一下equals()方法在object类中的源码:

public boolean equals(Object obj){

        return (this == obj)

}

在源码里面equals()方法是直接用==实现的,而如果我们希望不同内存但是相同内容的两个对象equals时返回true,此时我们就需要对equals方法的进行重写。

我们重点讲一下equals方法重写时的要求:

1.  首先它的参数必须为object类型,否则就不叫重写。

2.  对于任何非空值的引用x,x.equals(null)必须返回false。

3.  equals()方法必须是自反的,x.equals(x)必须返回ture。

4.  equals()方法必须是对称的,x.equals(y)和y.equals(x)返回值必须相同。

5.  equals()方法是可传递的,x.equals(y)和y.equals(z)都返回true,则x.equals(z)返回true.

6.  equals()方法是一致的,当x,y引用的对象信息没有被修改时,多次调用x.equals(y)的返回值是一样的。

我们基于以上要求重写一个Person类的equals方法,假定这个Person类只有name和age两个属性。

class Person{

    private int age ;

    private String name;

    public Person(int age,Stringname){

       this.age=age;

       this.name=name;

    }

    @Override

    public boolean equals(Objectobj) {

       //如果obj对象为空

       if(obj==null){

           return false;

       }

       else{

      //判断obj是否为Person类型的实例

           if(obj instanceof Person){

              Person temp=(Person)obj;

      //判断各属性内容是否一致

              if(temp.age==this.age&&temp.name.equals(this.name)){

                  return true;

            }

           }

       }

       return false;

}

public class TestEquals {

    public static void main(String[]args) {

       Person p1=new Person(15,"wawa");

       Person p2=new Person(15,"wawa");

       System.out.println(p2.equals(p1));

    }

}

此时输出结果为true,重写时记得验证一下equals方法的自反性,对称性,一致性和传递性,这里就不一一验证了。

注意:temp.name.equals(this.name)调用的equals方法是String类重写的equals方法,不是Person类重写的

我们重点看下equals方法里面的代码:

首先判断obj对象为不为null,为null则返回false,

第二步判断obj是否为正确的类型,

第三步检查参数中传入的属性是否与当前对象相匹配,是则返回true

还需要强调的一点是重写equals方法之后一般要对hashCode方法进行重写,这个就不细讲了。

以上是博主对equals方法的一些理解,若有不当之处欢迎指正。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值