1、贴源码,暂且自行阅读
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
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;
}
}
return false;
}
2、释之
NO1、判断引用值是否相等,相等即t返回rue,不用往下走;
NO2、判断类型是否匹配,类型相同,长度相等,逐个比较字符是否一样,完全符合,则返回ture,一旦不对,返回false;
说明:如果两个对象等价,前提是它们一定为相同的类型
NO3、类型不匹配,返回false。
3、换种编码风格,精简逻辑
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (!(anObject instanceof String)) {
return false;
}
String anotherString = (String) anObject;
int n = value.length;
if (n != anotherString.value.length) {
return false;
}
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
简单释之
1、引用不同,不相等;
2、类型不同,不相等;
3、长度不等,不相等;
4、字符不对等,不相等;
5、排除所有不符合的情况,即相等。