Object类的equals方法和重写equals方法

Object类的equals方法

Person类默认继承了object类,所以可以使用0bject类的equals万法
boolean equals(object obj)指示其他某个对象是否与此对象“相等”。object类equals方法的源码;
  public booLeaequals( object obj) {
    return (this == obj);
  }
参数:
  object obj:可以传递任意的对象

方法体:
  ==:比较运算符,返回的就是一个布尔值true,false

  基本数据类型:比较的是值

  引用数据类型:比较的是两个对象的地址值
  this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法,所以this就是P1

  obj是谁?传递过来的参数p2
  this==obj --> p1==p2

默认比较的是地址值

Person

public class Person {
    private String name;
    private int age;
    private String sex;

    public Person(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Person() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

测试

public static void main(String[] args) {
        Person p1 = new Person( "马尔扎哈",18,"");
        Person p2 = new Person( "莫扎特" , 18,"");

        p1=p2;
        System.out.println("p1: "+p1);
        System.out.println("p2: "+p2);



        Person p3 = new Person( "钢炮",18,"");
        Person p4 = new Person( "01式-仁德" , 18,"");

        p3=p4;
        System.out.println("p3: "+p3);
        System.out.println("p4: "+p4);


        Person p5 = new Person( "千变",18,"");
        Person p6 = new Person( "雷神索尔" , 18,"");

        p5=p6;
        System.out.println("p5: "+p5);
        System.out.println("p6: "+p6);




        Person p7 = new Person( "绿巨人",18,"");
        Person p8 = new Person( "狼叔" , 18,"");

        p7=p8;
        System.out.println("p7: "+p7);
        System.out.println("p8: "+p8);



        boolean b = p1.equals(p2);
        System.out.println(b);

        boolean b1 = p3.equals(p4);
        System.out.println(b1);

        boolean b2 = p5.equals(p6);
        System.out.println(b2);

        boolean b3 = p7.equals(p8);
        System.out.println(b3);
    }

 

重写Object类的equals方法

object类的equals方法黑认比较的是两个对象的地址值,没有意义

所以我们需要重写equals方法,比较两个对象的属性值(name, age)

ALT+INT

 

 

 无脑回车即可

 

这是在Person类里面重写的equals方法

@Override
    public boolean equals(Object obj) {
        //增加一个判断,传递的参数obj是this本身,直接返回true,提高程序效率
        if (obj == this) {
            return true;
        }
        //增加一个判断,传递的参数obj是null,直接返回false,提高程序的效率
        if (obj == null) {
            return false;
        }

        //增加一个判断,是Person类型在转换,防止类型转换异常CLasscastException* /l
        if (obj instanceof Person) {
            //使用向下转型(强转)把object类型转换为Person
            Person p = (Person) obj;
            //比较两个对象的属性;一个是调用方法的this(p1),一个就是p(obj=p2)
            boolean b = this.name.equals(p.name) && this.age == p.age;
            return b;
            //不是Person类型直接返回false
        }
        return false;
    }

 

posted @ 2022-07-05 10:24  漁夫  阅读(61)  评论(0)    收藏  举报