笔试题目一:==与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的方法
网友评论