【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
**开源地址:https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB **
}
return false;
}
通过源码可以看到equals方法中首先判断的是地址是否相同,如果地址相同则直接返回为true,如果地址不相同则再判断值是否相同。这里首先说明一下这段equals源码是在String类中的,如下图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210328152205360.png)
就是说只有String类型的使用equals方法才能先比较地址是否相同,如果地址不同则再比较值是否相同,那么equals在对象类型或者数组类型中有没有这种比较逻辑呢,我们看图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210328152605955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA5NjEzMw==,size_16,color_FFFFFF,t_70)
class Student {
public Student(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student s1 = new Student("张三");
Student s2 = new Student("张三");
System.out.println(s1.equals(s2)); // false
char [] q = {1,2,3};
char [] w = {1,2,3};
System.out.println(q.equals(w)); //false
我们实例了两个学生对象,然后对象name都赋值为“张三”,而我们也创建了两个数组对象,里面都是1、2、3,这样看来如果用equals方法的话,应该都为true才对,但是我们的结果都为false,这是为什么呢,让我们点击对象或者数组调用的equals方法中去看看,如图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210328153055450.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA5NjEzMw==,size_16,color_FFFFFF,t_70)
我们可以看到对象和数组调用的equals方法都是Object类中的方法,而且Object类中的方法只有一个对比地址的逻辑,没有对比值的逻辑,所以如果我们没有重写equals方法的话,对象和数组都是用的Object类中的方法都是比较的地址,如果我们重写equalse的话才可以在equals方法中写比较值的逻辑,而String类型的equals方法本身就有比较值的逻辑,所以我们平时基本类型比较值的时候使用 == ,String类型比较值的时候使用equalse,如果要比较两个对象是否相等直接使用equalse的话比较的是两个对象的地址是否相等。
**总结**
如果大家想了解更多的有关JAVA方面的面试题与答案详解请搜索关注我的微信公众号《小奇JAVA面试》里面每天都会更新JAVA面试题,希望能够帮助到大家。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210328153615855.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDA5NjEzMw==,size_16,color_FFFFFF,t_70)