首页 > java String源码equals()方法不明白的地方

java String源码equals()方法不明白的地方

直接贴代码吧:

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

【热门文章】
【热门文章】