我是靠谱客的博主 疯狂钥匙,最近开发中收集的这篇文章主要介绍Java记录 -23- equals方法和双等号解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

equals方法和双等号解析

1.在Java的源代码中,java.lang.Object类中有一个equals方法;这个方法特别简单,但是会经常使用到,并且面试的时候也会经常出现。

2.下面是java源码中Object的equals方法的实现,其实现非常简单:

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

3.由于equals()方法定义在Object类中,因此Java中的每个类都具有该方法。

4.对于Object类的equals方法来说,它是判断调用equals方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。

5.      Object obj1 = new Object();
        Object obj2 = new Object();
        System.out.println(obj1.equals(obj1));  //true
        System.out.println(obj1.equals(obj2));  //false
上面的两个输出验证了上面的说法,同一个对象使用equals方法进行比较返回true,不同两个对象使用equals进行比较返回false。

6.      String s1 = new String("aa");
        String s2 = new String("aa");
        System.out.println(s1.equals(s2));

针对String两个不同对象使用equals进行比较,此刻我们将产生迷惑,竟然返回true,这有驳斥与上面的说法,这是为什么呢?

7.面对String的equals方法,我们需要仔细思考一些问题:Java中所有的类都继承自Object,String也不例外,但是它的equals方法显然没有按照Object类的方法执行,难道String重写了父类Object类的equals方法?

8.带着上面的疑问,我们可以查看写String的源码,看看equals方法怎么实现的就好了。编程学习中,解决疑惑的最好方法就是查看源码,源码能真实的告诉你真相。

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
}

9.由上面的源码可以看出,String类重写了父类Object的equals方法。对于String类的equals方法来书,它是判断调用这个方法的字符串与传进来的字符串的内容是否一致。长度和内容都一样。

10.总结来说,在使用equals方法时,如果使用的类没有重写父类Object的equals方法,则比较两个对象的引用是否指向同一个对象,即等价于双等号;如果使用的类重写了父类Object的equals方法,比如String类,此刻equals方法比较的是什么就要看重写的内容了,String的equals比较的是两个字符串的内容是否一致。

11.由上面的结论我们可以得出,在判断String相等性时,一定要使用equals方法,而不是使用==,equals方法第一步就进行了==的判断,只有使用equals方法才能判断两个字符串是否内容一致。

12.不能笼统的说,==是判断两个引用是否一致,而equals方法是判断内容是否一致,这种说法是不准确的。==是判断两个引用是否一致这个没错,但equals方法使用在没有重写Object的方法时,是判断两个引用地址是否一致,而重写了的时候就不一定是了,String就是判断内容是否一致。我们在写自己的类时都可以重写equals方法,来实现内容一致。


转载于:https://blog.51cto.com/zlfwmm/1692544

最后

以上就是疯狂钥匙为你收集整理的Java记录 -23- equals方法和双等号解析的全部内容,希望文章能够帮你解决Java记录 -23- equals方法和双等号解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部