一、equals()方法的由来
1、== 的使用场景
对基本数据类型来说,==用于比较两个值是否相等
对引用数据类型来说,==用于比较两个引用是否指向同一个对象
2、equals方法的产生
在上述对引用数据类型中的不同引用进行比较时,存在局限性,由此产生了独有的equals()方法。
可以用于比较两个引用指向的对象内容是否一致,有较强的灵活性,也可被重写以满足不同需求。
二、解读equals()的源代码
1、第一个if
第一个if比较两个引用是否指向同一个对象,如果是同一对象即返回true。
if (this == anObject) {
return true;
}
2、第二个if
类型判断
首先判断被比较的对象是否是String类型,如果不是,直接返回false。
长度判断及遍历字符判断
如果类型一致,无论被比较的对象是什么类型,都将其类型转换为String类,之后开始比较,第一次比较:比较两个对象的长度是否一致;若一致则进行第二次比较:从前往后依次遍历两个对象的每一个字符,判断两个字符是否相同。若每一个字符都一一对应相同,则返回true;一旦有一个字符不一致,则返回false
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
最后,附上equals()在idea编辑器的源代码:

以上都是个人见解与总结,如果错误,敬请指正;如有疑问,欢迎交流。


1642

被折叠的 条评论
为什么被折叠?



