java源码之equals
java.lang.Object:equals初始比较方法(所有equals的祖先)
public boolean equals(Object obj) {
return (this == obj);
}
没什么可说的Object就是比较两个对象是否相等,在返回值
java.lang.String的equals()方法
Object是所有类的祖先类,同样也是string类的祖先类所以String重写了equals方法
public boolean equals(Object anObject) {
//首先判断传入的是否是同一个对象如果是直接返回true
if (this == anObject) {
return true;
}
//判断传入的对象是否为string类型不是直接返回false
if (anObject instanceof String) {
//将传入的object类型转换为String类型
String anotherString = (String)anObject;
//获取原字符串对象的长度
int n = value.length;
//判断原字符串是否于传入需要对比的字符串的长度是否相等相等进入下一层判断,否则返回false
if (n == anotherString.value.length) {
//获取原先字符串的char数组
char v1[] = value;
//获取传入要比较的字符串的char数组
char v2[] = anotherString.value;
//用于记录下标
int i = 0;
//循环对比char数组的每个值如果有一个不相等就直接返回false,如果循环完毕所有值都相等返回false
while (n-- != 0) {
//挨个比较数组中的每个值
//这里为什么!=因为char为基本数据类型可以直接用!=/==相比较
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
简单总结
1.进行比较所传入的对象是否是同一个对象,是返回true,不是继续进行判断
2.判断比较的对象是否为String是进入下一层判断,不是返回false(因为这是字符串的判断,如果连字符串都不是就没有比较的意义)
3.将原字符串与要比较的字符串的长度进行比较,如果相等则进入下一层判断不相等返回false
4.以上判断都通过了就进行最终判断将要比较的字符串转为char数组,再循环中用!=挨个比较数组中的每个值,如果循环结束还是都相等,就证明这两个字符串相等,返回true