重写equals方法的安全写法

1. 什么是equals方法?

我们首先得知道,Object类是 Java中所有类的父类(超类/基类),也就是说,在Java中,所有的类都是默认继承自Object类的,换言之,Object类中所实现的方法我们都可以直接拿来用。而equals方法便是Object类所实现的众多方法之一。

以下截图自Java11 API
在这里插入图片描述
Object类的所有方法:
在这里插入图片描述

1.1 equals方法:

  • equals:是Object类中的方法,只能判断引用类型,等下可以带大伙看看jdk源码

2. 为什么要重写equals方法?

我们有Object类实现的equals方法能用不就行了?为啥还得重写equals方法呢?这就要看看Object类equals方法实现机制了。
在这里插入图片描述

2.1 举个例子吧~

比较两个int时可以直接用 == ,当它们相等时结果为true,而当new了两个属性完全一样的对象时,再用 == 来进行比较就会出现错误,如我们所见,明明我们应该想要得到true的,结果却是false
源码:
在这里插入图片描述

运行结果:
在这里插入图片描述
到这里,我们应该大致清楚为啥要在比较对象时重写equals方法了,因为Object类提供给我们的不好使~~

//String类equals源代码:
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
posted @ 2021-10-06 13:07  不善言谈者2018  阅读(100)  评论(0编辑  收藏  举报