黑马程序员技术交流社区
标题:
关于JAVA中String重写equals()方法源码的疑问
[打印本页]
作者:
zero_start
时间:
2016-11-5 13:07
标题:
关于JAVA中String重写equals()方法源码的疑问
关于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;
}
}
作者:
雪中鱼01
时间:
2016-11-5 13:11
楼主太屌了 完全不明白楼主说什么
作者:
wangyuit
时间:
2016-11-5 13:32
好晕啊
作者:
IceLoveInFire丶
时间:
2016-11-5 17:37
钻研精神值得鼓励,加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2