StringBuilder & StringBuffer
两者时间的差别在于线程安全,前者安全,后者效率高
文章目录
1.StringBuffer
线程安全的可变字符序列,类似于 String 的字符串缓冲区,但不能修改
虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
1.1构造方法
说明 | |
---|---|
StringBuffer() | 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。 |
StringBuffer(CharSequence seq) | 构造一个字符串缓冲区,它包含与指定CharSequence 相同的字符。 |
StringBuffer(int capacity) | 构造一个不带字符,但具有指定初始容量的字符串缓冲区。 |
StringBuffer(String str) | 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 |
1.2增
说明 | |
---|---|
StringBuffer append(String str) | 增加在StringBuffer最后 |
StringBuffer insert(int offset, String str) | 插入在任意位置(索引,插入内容) |
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append("Hello");
System.out.println("sb: " + sb); // Hello
System.out.println("sb2: " + sb2); // Hello
//是同一个容器,所以不需要创建新的对象
sb.append(false).append(2.5).append("World").append(new Object());
System.out.println("sb: " + sb);
//直接链式append就可以了
1.3删
说明 | |
---|---|
StringBuffer deleteCharAt(int index) | 删除指定的内容 |
StringBuffer delete(int start, int end) | 删除区间[start,end)左开右闭原则 |
1.4改
说明 | |
---|---|
public StringBuffer replace(int start,int end,String str) | (开始位置,结束位置,替换内容)左开右闭原则 |
1.5其他
说明 | |
---|---|
public StringBuffer reverse() | 倒置 |
public String substring(int start) | 截取 |
public String substring(int start,int end) | 截取区间[start,end)左开右闭原则 |
1.5.1删除和截取两个的区别
-
删除是将字符串从容器中删除,截取是提取从容器中提取字符串,并不会改变容器
String str = sb.substring(sb.indexOf("7")); System.out.println("sb: " + sb); System.out.println(str); //截取是不会改变容器的
2.StringBuilder
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候,优先采用,因为快
3.String,StringBuffer,StringBuilder 三者的区别
- String:不可变字符序列,每次进行改变时,都创建了新的String对象
- StringBuffer:可变字符序列, 方法大都采用了 synchronized 关键字进行修饰 ,线程安全,效率低
- StringBuilder:可变字符序列,方法没有锁,所以单线程下效率高
- StringBuffer & StringBuilder方法和功能完全是等价的。
效率:String < StringBuffer < StringBuilder