您的位置:首页 > 编程语言 > Java开发

Java记录 -23- equals方法和双等号解析

2017-07-01 15:56 281 查看
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方法,来实现内容一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: