java String源码equals()方法不明白的地方
PHP中文网
PHP中文网 2017-04-18 09:18:43
0
2
434

直接贴代码吧:

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的意思
刚开始看这部分,很多不明白的地方,求解释,先谢过啦

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
Peter_Zhu

String类只是封装字符串的一些操作的,真是的字符串就是存在其下value这个字符数组中的。而String.length()的内部实现就是value.length,所以这里直接使用value的长度,不用调用String.length(),也避免了调用方法多余的开销。

Peter_Zhu

解释

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!