while (n-- != 0) {
//判断每一位字符是否相同,如果有一位字符不相同则返回false
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
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的话比较的是两个对象的地址是否相等。
### 最后
在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
![](https://img-blog.csdnimg.cn/img_convert/6c004bdc1c1004a1f4aa92eb803e80c6.webp?x-oss-process=image/format,png)
![MyBatis答案解析](https://img-blog.csdnimg.cn/img_convert/af30fcc84d8128b992256c84f10ac2ea.webp?x-oss-process=image/format,png)
**由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!**
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!**
大家看完有什么不懂的可以在下方留言讨论也可以关注。
觉得文章对你有帮助的话记得关注我点个赞支持一下!
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**