博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.lang.StringBuilder源码分析
阅读量:6835 次
发布时间:2019-06-26

本文共 3277 字,大约阅读时间需要 10 分钟。

StringBuilder是一个可变序列的字符数组对象,它继承自AbstractStringBuilder抽象类。它不保证同步,设计出来的目的是当这个字符串缓存只有单线程使用的时候,取代StringBuffer的。建议使用它而不是StringBuffer,因为它的速度更快。

StringBuilder有自己的容量(字符数组),当容量还没有被占满的时候,不必申请新的空间,当容量被占满后,它会自动地扩容。

public final class StringBuilder extends AbstractStringBuilder    implements java.io.Serializable, CharSequence {    public StringBuilder() {//构造方法只是调用父类的构造器        super(16);    }        public StringBuilder(int capacity) {//capacity指定容量大小        super(capacity);    }    public StringBuilder(String str) {//str指定初始容器存放的字符串,容量是str.length+16        super(str.length() + 16);        append(str);    }    public StringBuilder(CharSequence seq) {        this(seq.length() + 16);        append(seq);    }   //StringBuilder重载了父类所有的append方法,以支持添加任何类型的数据到容器中    @Override    public StringBuilder append(Object obj) {        return append(String.valueOf(obj));    }    @Override    public StringBuilder append(String str) {        super.append(str);        return this;    }    public StringBuilder append(StringBuffer sb) {        super.append(sb);        return this;    }    @Override    public StringBuilder append(CharSequence s) {        super.append(s);        return this;    }    public StringBuilder append(CharSequence s, int start, int end) {        super.append(s, start, end);        return this;    }    @Override    public StringBuilder append(char[] str) {        super.append(str);        return this;    }        //...更多的append重载方法,实现在StringBuilder append所有数据类型    public StringBuilder appendCodePoint(int codePoint) {//这个方法是通过Unicode编码来append一个字符,比如'a'的Unicode=97,appendCodePoint(97)相当于把a添加到容器末尾        super.appendCodePoint(codePoint);        return this;    }    public StringBuilder delete(int start, int end) {//删除end-start的子串        super.delete(start, end);        return this;    }    public StringBuilder deleteCharAt(int index) {//删除index下标的字符        super.deleteCharAt(index);        return this;    }    public StringBuilder replace(int start, int end, String str) {//用str取代end-start的子串        super.replace(start, end, str);        return this;    }   //insert方法实现在字符串的任意位置插入数据    public StringBuilder insert(int index, char[] str, int offset,                                int len)    {        super.insert(index, str, offset, len);        return this;    }    //...更多的insert重载方法    public int indexOf(String str) {//找到子串的起始位置        return super.indexOf(str);    }    //...更多的indexOf重载方法,实现找到子串的位置    public StringBuilder reverse() {//将容器内的字符串倒转        super.reverse();        return this;    }    public String toString() {//toString是返回new一个String对象        // Create a copy, don't share the array        return new String(value, 0, count);    }    private void writeObject(java.io.ObjectOutputStream s)//writeObeject提供序列化机制        throws java.io.IOException {        s.defaultWriteObject();        s.writeInt(count);        s.writeObject(value);    }    private void readObject(java.io.ObjectInputStream s)//readObject提供反序列化机制        throws java.io.IOException, ClassNotFoundException {        s.defaultReadObject();        count = s.readInt();        value = (char[]) s.readObject();    }}

StringBuilder内部维护一个字符数组,在这个字符数组上对字符进行各种操作,当需要对字符串进行频繁操作时,StringBuilder能提供很好的性能,比起直接操作String,它不需要创建很多对象。

转载于:https://www.cnblogs.com/13jhzeng/p/5618500.html

你可能感兴趣的文章
一种计算e的方法
查看>>
与Jquery Mobile的第一次亲密接触
查看>>
Windows 8实例教程系列 - 开篇
查看>>
C# 多重overide
查看>>
安装arcgis server 10.2遇到的问题总结
查看>>
查看他人数据接口的安全校验机制
查看>>
react 通过 classnames 处理 多个class 的问题
查看>>
倒计时原理
查看>>
让ul中的li居中显示
查看>>
区分super和this
查看>>
最近工作
查看>>
XJOI网上同步训练DAY2 T2
查看>>
Codeforces 509F Progress Monitoring
查看>>
spring cloud: eureka搭建
查看>>
导弹拦截
查看>>
两个被广泛使用的Model Checking工具
查看>>
BZOJ 4999 This Problem Is Too Simple!
查看>>
[HDU]3555Bomb
查看>>
论语之里仁第四
查看>>
html优化
查看>>