为什么我们需要在Java中覆盖equals方法

96 篇文章 2 订阅
93 篇文章 3 订阅

默认情况下,当我们在Java中比较同一类的两个实例时,将检查它们是否都引用同一对象。

因此,无论所包含信息的相似性如何,两个实例可能完全不同。举个例子:

public class PersonDetails {

    private Integer age;
    private String firstName;
    private String lastName;
    private String nationality;

    public PersonDetails(Integer age, String firstName, String lastName, String nationality) {
        this.age = age;
        this.firstName = firstName;
        this.lastName = lastName;
        this.nationality = nationality;
    }

}

如果我们按以下方式运行主类,

public class Main {
    public static void main(String[] args){
        PersonDetails first = new PersonDetails(18,"John","Doe","American");
        PersonDetails second = new PersonDetails(18,"John","Doe","American");

        if(first.equals(second)){
            System.out.println("Equal");
        }
        else {
            System.out.println("Not equal");
        }
    }
}

输出将是:不等于

为了检查对象内部值的相等性,我们将需要在类中重写equals方法。

public class PersonDetails {

        private Integer age;
        private String firstName;
        private String lastName;
        private String nationality;

        public PersonDetails(Integer age, String firstName, String lastName, String nationality) {
            this.age = age;
            this.firstName = firstName;
            this.lastName = lastName;
            this.nationality = nationality;
        }

        //Overriding equals() to compare PersonDetails objects
        @Override
        public boolean equals(Object o){
                //If object is compared to itself then return
                if(o == this){
                    return true;
                }

                //Check if o is an instance of PersonDetails or not
                if(!(o instanceof  PersonDetails)){
                    return false;
                }

                // typecast o to PersonDetails so that we can compare data
                PersonDetails personDetails = (PersonDetails) o;

                // Compare the values inside the objects and return accordingly
                return Integer.compare(age,personDetails.age) == 0
                        && firstName.compareTo(personDetails.firstName) == 0
                        && lastName.compareTo(personDetails.lastName) ==0
                        && nationality.compareTo(personDetails.nationality) == 0;

        }
}

如果再次运行主类,则
输出将是:等于

学习更多Java相关知识可以加入我的十年Java学习园地,答疑解惑,技术交流,对学习Java有帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值