Java Object equals()

public class Test{
    
    
    private int year;
    private int month;
    private int day;

    public Test() {
    
    
    }

    public Test(int year, int month, int day) {
    
    
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public static void main(String[] arg) {
    
    
        Test test = new Test(1997,4,28);
        Test test1 = new Test(1997,4,28);
        Test test2 = new Test(1999,4,28);
        System.out.println(test.equals(test1));
        System.out.println(test.equals(test2));
        System.out.println(test.equals(test1));

    }
/*    public boolean equals(Object obj){
        return this==obj;
    }*/

/*    public boolean equals(Object obj){
        int year1=this.year;
        int month1 =this.month;
        int day1 =this.day;
        if(obj instanceof Test){
            Test test2= (Test) obj;
            int year2=test2.year;
            int month2=test2.month;
            int day2=test2.day;
            if(year1==year2&&month1==month2&&day1==day2) {
                return true;
            }
        }
        return false;
    }*/

}

如果我们自己不重写从Object类中继承的equals()而是直接使用此时此方法比较的是两个对象的内存地址是否相同,很显然两个对象的内存地址是不会相同的所以说一定会返回false;

>

public class Test{
    
    
    private int year;
    private int month;
    private int day;

    public Test() {
    
    
    }

    public Test(int year, int month, int day) {
    
    
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public static void main(String[] arg) {
    
    
        Test test = new Test(1997,4,28);
        Test test1 = new Test(1997,4,28);
        Test test2 = new Test(1999,4,28);
        System.out.println(test.equals(test1));
        System.out.println(test.equals(test2));
        System.out.println(test.equals(test1));

    }
/*    public boolean equals(Object obj){
        return this==obj;
    }*/

    public boolean equals(Object obj){
    
    
        int year1=this.year;
        int month1 =this.month;
        int day1 =this.day;
        if(obj instanceof Test){
    
    //如果不是相同类型的对象根本就不会出现
        //相等这种情况
            Test test2= (Test) obj;//强转之后我们才可以比较两个对象是否相等
            int year2=test2.year;
            int month2=test2.month;
            int day2=test2.day;
            if(year1==year2&&month1==month2&&day1==day2) {
    
    
                return true;
            }
        }
        return false;
    }

}

在这里插入图片描述

当我们重写了从object继承的equals方法后我们就可以真正的比较两个对象是否相同了,此时才会有返回true的可能,不重写是不会存在true这种情况的,因为两个对象的内存地址是不可能相同的。

equals方法改良
在这里插入图片描述
最终equals最简化版
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45858803/article/details/121409299