黑马程序员技术交流社区

标题: 关于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