首页 > 科技 >

聊聊 StringBuffer 与 StringBuilder

2019-11-15 06:45:27 暂无 阅读:657 评论:0

1.分析 StringBuffer 的底层源码

聊聊 StringBuffer 与 StringBuilder

它是JDK1.0引进来的,它继承于AbstractStringBuilder

再看看它的父类AbstractStringBuilder的源码:

聊聊 StringBuffer 与 StringBuilder

alue: 用于存储字符,可以看到value没有用final修饰,表明它可以进行不断地扩容;

int count:计数是使用的有效字符数

2. StringBuffer 详述

StringBuffer 线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。

在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

每个字符串缓冲区都有一个容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。

如果内部缓冲区溢出,则会自动变大。除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException 。

从版本JDK 5开始,这个类别已经被一个等级类补充了,这个类被设计为使用一个线程StringBuilder 。 StringBuilder应该使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步。

3.StringBuffer 的构造方法

StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。

StringBuffer(CharSequence seq) 构造一个包含与指定的相同字符的字符串缓冲区 CharSequence 。

StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。

StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。

4. StringBuffer 的常用方法

int length() 返回长度(字符数)

char charAt(int index) 返回 char在指定索引在这个序列值

int indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引

String substring(int start) 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

StringBuffer append(xxx) 提供了很多的append()方法,用于进行字符串拼接

StringBuffer delete(int start, int end) 删除此序列的子字符串中的字符

StringBuffer replace(int start, int end, String str) 用指定的String中的字符替换此序列的子字符串中的 String

StringBuffer insert(int offset, xxx) 在指定位置插入xxx

StringBuffer reverse() 把当前字符序列逆转

测试代码:

聊聊 StringBuffer 与 StringBuilder

测试结果:

聊聊 StringBuffer 与 StringBuilder

二、聊聊 StringBuilder

从版本JDK 5开始,这个类别已经被一个等级类补充了,这个类被设计为使用一个线程StringBuilder 。 StringBuilder应该使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步。

StringBuilder的常用方法与StringBuffer的相同,这里不再详述。

三、两者 与 String 的区别

String 由final修饰,是不可变字符序列

StringBuffer 可变字符序列,其效率低,但是线程安全

StringBuilder 可变字符序列,其效率高,但是线程不安全

相关文章