A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

zero_start

中级黑马

  • 黑马币:18

  • 帖子:82

  • 精华:0



关于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;
    }
}

3 个回复

倒序浏览
楼主太屌了 完全不明白楼主说什么
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
钻研精神值得鼓励,加油
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马