java面试==、equals方法相关

2018-03-25  本文已影响0人  pr0metheus

笔试题目一:==与equals方法的区别?

答案:== 比较的是值,而对于equals方法如果被比较的对象没有覆盖equals方法的话那么比较的还是内存地址,如果覆写了equals方法那么我们才能说比较的是对象的内容。 例如String就覆写了equals方法比较的是字符串中的内容而我们自定义的类如果没有去覆写equals方法的话那么还是会从Object对象中继承equals方法,那么只会比较对象的内存地址。

代码如下:

public class EqualsTest {
    public static void main(String[] args) {
        String str = new String("abc");
        String str2 = new String("abc");
        System.out.println(str == str2);
        System.out.println(str.equals(str2));
    }
}

结果大家都知道:false、true

再看下面一段代码

public class EqualsTest {
    public static void main(String[] args) {
        Object obj = new Object();
        Object obj2 = new Object();
        System.out.println(obj == obj2);
        System.out.println(obj.equals(obj2));
    }
}

结果是:false、false

查看Object的源代码:

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

所以对于没有覆盖equals的方法的类,用它的对象去进行equals比较的时候还是会采用对象内存地址的比较。

知识点:在自定义类的时候如果该类需要进行相等性比较的话,那么就要覆写equals的方法

上一篇 下一篇

猜你喜欢

热点阅读