关于JAVA中String重写equals()方法源码的疑问.
class String{
private static final char[] value;
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;
}
}
按常规想法源码应该是最精炼的,但是分析了equals()源码后,发现if里面的变量i完全可以被n替换,不用多定义一个变量.但这样做应该有不合理的地方,不然sun公司的大神们应该会考虑到.但没有这么做,那位大神有比较有说服里的解释吗?用n替换后的代码如下:
class String{
private static final char[] value;
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;
while (n-- != 0) {
if (v1[n] != v2[n])
return false;
}
return true;
}
}
return false;
}
} |
|