直接贴代码吧:
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){
//*********求解释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;
}
对于anotherString.value.length,最初的想法是用anotherString.length(),但是对于源码中的解释,实在没明白value.length的意思
刚开始看这部分,很多不明白的地方,求解释,先谢过啦
String
类只是封装字符串的一些操作的,真是的字符串就是存在其下value
这个字符数组中的。而String.length()
的内部实现就是value.length
,所以这里直接使用value
的长度,不用调用String.length()
,也避免了调用方法多余的开销。解释
String类的内部是使用一个char[]数组来进行字符操作的。
/* The value is used for character storage. /
private final char value[];
这个value就是用来存储String字符串的。也就是当前字符串对象this
在该equals方法中:anObject表示需要比较的字符串,value也就是当前字符串this
回答
至于你的问题:对于anotherString.value.length,最初的想法是用anotherString.length(),但是对于源码中的解释,实在没明白value.length的意思。
这是因为value本身就是一个char[]数组,而anotherString是转换成String后的一个String实例,其实也是一个char[]数组。
所以,两个char[]数组中的每个元素逐个进行比较,就是equals方法了。。。。。
可以参考:http://www.cnblogs.com/meet/p/4696255.html