美文网首页
5 java.lang.StringBuilder

5 java.lang.StringBuilder

作者: 十丈_红尘 | 来源:发表于2018-09-20 20:59 被阅读0次

1️⃣类定义

public final class StringBuilder extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

StringBuilder类跟String类一样定义成final形式,主要是为了“效率”和“安全性”的考虑,若StringBuilder 被继承,由于它的高使用率,可能会降低它的性能。
Serializable:主要是进行序列化的;
AbstractStringBuilder: StringBuilder的父类,StringBuilder很多方法都是直接调用的AbstractStringBuilder的(AbstractStringBuilder类里定义了很多方法,在StringBuilder里是直接通过supper.XXX()调用的)


2️⃣构造器

由于StringBuilder里边没有像StringBuffer这样的缓存数组存在,所以我们直接介绍构造器

    /**
     * 默认调用的是AbstractStringBuilder(int capacity)的构造器,容量为16
     */
    public StringBuilder() {
        super(16);
    }

    /**
     * 同无参构造器调用的都是AbstractStringBuilder(int capacity)的构造器  
     * 容量根据传入的capacity决定;
     */
    public StringBuilder(int capacity) {
        super(capacity);
    }

    /**
     * 调用的是AbstractStringBuilder(int capacity)的构造器,然后在传入字符串长度的
     * 基础上在加16进行创建
     */
    public StringBuilder(String str) {
        super(str.length() + 16);
        append(str);
    }

    /**
     * 调用的是AbstractStringBuilder(int capacity)的构造器,然后在传入的
     * CharSequence基础上在加16进行创建
     */
    public StringBuilder(CharSequence seq) {
        this(seq.length() + 16);
        append(seq);
    }

3️⃣方法

StringBuilder的常用方法都是直接调用父类AbstractStringBuilder的,这里仅以reverse为例进行讲解

    @Override
    public StringBuilder reverse() {
        super.reverse();
        return this;
    }

1 常用的方法基本都是调用的父类的
2 方法声明上相较于StringBuffer少了synchronized修饰符,所以效率比StringBuffer要高;
3 return this是和StringBuffer一样的, 都有这段代码.

    @Override
    public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }

相较于StringBuffer,StringBuilder少了一个缓存数组toStringCache,所以这里的toString()方法就是直接创建一个String字符串返回而已;


5️⃣总结

1 构造的大小和16相关. 要么是16, 要么就是加16.(除非使用了定制数组大小的那个构造器, 就是指定多大, 初始数组就是多大了.)
2 实现了toString方法. 内部实现就是每次toString都是new一个String对象.
其他方法都是调用的父类的方法. 只是多加了一行return this;
3 方法上少了synchronized修饰符来保证线程安全,所以效率会有所提升.
4 执行效率对比String < StringBuffer < StringBuilder : 由于String每一次创建都是一个不可变长的数组,创建以后如果需要执行其他操作都会在内存中新建一个数组来进行操作,所以效率是最低的;StringBuffer的执行效率高于String的原因是由于StringBuffer是一个可变长的数组来进行存储的,但是他的效率也不是最高的,StringBuilder的效率高于StringBuffer的原因是由于在StringBuffer中的方法都是同步方法,而且都会执行一个缓存的判断,所以三者相比StringBuilder的效率是最高的;

相关文章

  • 5 java.lang.StringBuilder

    1️⃣类定义 StringBuilder类跟String类一样定义成final形式,主要是为了“效率”和“安全性”...

  • java.lang.StringBuilder、StringBu

    1. 描述: StringBuilder和StringBuffer都是AbstractStringBuilder的...

  • 灵心儿组计分

    9.24 棉芯➕5➕5 晨萌➕5 乐乐➕5➕5➕5➕5 楠楠➕5➕5➕5➕5 水儿➕5➕5 七炫➕5➕5➕5➕5

  • 未闻花名口琴简谱

    1 4 5 5 6 6 6 6 6 6 5 5 5 5 5 5 4 4 4 4 4 4 4 1 1 1 4 5 5...

  • 5/5

    该地区最重要的科技增长毫无疑问是半导体产品。在新泽西州Bell实验室里,William曾是晶体管发明人之一,195...

  • 5/5

    我允许自己表达疲惫,允许自己懒懒前行,允许自己自然而然……感觉到放松,感觉到对自我的接纳,自己理解自己,直面自己,...

  • 5、5

    しょんぼり [寂しく]孤零零(地);[がっくり]垂气(成),无精打采(成) ¶~立っている/无精打采地站着 ¶彼は...

  • 5 .5

    今天去的晚了一点,然后男队那边早早就开始在训练了,但是女队现在还在慢悠悠的走,有十多分钟,这种学生投入性低,缺...

  • 5/5

    五一后第一天上课,虽然起晚了一点,不过语文课还是听上了。数学老师的课就是摸鱼,老师讲评了五一的卷子,真的超难!我原...

  • 托姆拉物语暴力火线技能树

    剑术:战吼5+5+10 射击:弱狙5+5+10 火线5+10 要领10 分身5+5+10 魔法:冲击波5+5+5+...

网友评论

      本文标题:5 java.lang.StringBuilder

      本文链接:https://www.haomeiwen.com/subject/mqxonftx.html