`
lg_asus
  • 浏览: 185084 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

source code reading album

 
阅读更多
public boolean contentEquals(CharSequence cs) {
        if (value.length != cs.length())
            return false;
        // Argument is a StringBuffer, StringBuilder
        if (cs instanceof AbstractStringBuilder) {
            char v1[] = value;
            char v2[] = ((AbstractStringBuilder) cs).getValue();
            int i = 0;
            int n = value.length;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
        // Argument is a String
        if (cs.equals(this))
            return true;
        // Argument is a generic CharSequence
        char v1[] = value;
        int i = 0;
        int n = value.length;
        while (n-- != 0) {
            if (v1[i] != cs.charAt(i))
                return false;
            i++;
        }
        return true;
    }


charAt(i)和value[i]的区别:下标访问非常快,而charAt()也是根据下标,额外多了个if判断,效率区别在于charAt()会进出栈+if,单个String效率差别并不大,我试了下,1w长度的字符串,这两种方法仅差3 milliseconds左右, 但要知道jvm里的大部分对象都是String,积沙成塔,这里额外的一点点高效也是非常乐观的。

ArrayList 实现RandomAccess,而LinkedList没有,在get()和subList()的时候这2个方法是不同的。

Integer.valueOf() 如果值是在-128~127,直接取的缓存。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics