8.19 对象比较 equals

发布时间 2023-06-08 18:16:55作者: 盘思动

demo1 equals 实例化参数内容相同才相等-- 类外对比

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

    @Override
    public String toString(){
        return "姓名:" + this.name + ",年龄:" + this.age;
    }

    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }

}


public class HelloWorld {
    public static void main(String args[]){
        Person perA = new Person("张三",22);
        Person perB = new Person("张三",22);// 当2个对象实例化内容不同时,equals判断返回false
        if(perA.getName().equals(perB.getName()) && perA.getAge().equals(perB.getAge())){
            System.out.println("同一个对象");
        } else {
            System.out.println("不是一个对象");
        }
    }

}

demo2 类内对比---这个方法,开发中会经常遇到!!!!

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

    // equals()方法这个时候会有两个对象:当前对象this,传入的Object
    public boolean equals(Object obj){
        if(!(obj instanceof Person)){//实例类型判断
            return false;
        }
        if(obj == null){
            return false;
        }
        if(obj == this){    //相同地址,则认为是同一个对象
            return true;
        }
        Person per = (Person) obj;//  获取子类中的属性---????
        return this.name.equals(per.name) && this.age == per.age;
    }

}


public class HelloWorld {
    public static void main(String args[]){
        Person perA = new Person("张三",22);
        Person perB = new Person("张三",22);
        System.out.println(perA.equals(perB));
    }

}