一、关于StringBuffer和StringBuilder的使用:
1.对比分析:
- String:不可变的字符序列(这三个底层都是char【】存储)
- StringBuffer:可变的字符序列;线程安全,效率低
- StringBuilder:可变的字符序列;jdk5.0新增,线程不安全,效率高
关于StringBuffer和StringBuilder,他们代码底层是一样的,就是多一个synchronize
查看源码可以得知一些重要消息:
1.当时用空参的创建字符串时:
StringBuffer str1 = new StringBuffer();//底层穿件了一个长度为16的char【】数组
2.当使用带参的创建字符串时:
StringBuffer sb = new StringBuffer(“abc”);//相当于穿件了一个字符串+16长度的char【】数组
3.当16长度不够了怎么办?扩容!
默认情况下,扩容是原理容量*2+2,同时将原有数组中的元素赋值到新的数组中。如果长度太大,那么会直接赋值要添加的数组长度给容量。
因此:开发中建议使用StringBuffer(int capacity)指定数组的长度,在知晓大概的长度的情况下。
二、StringBuffer的常用方法:
- StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
- StringBuffer delete(int start,int end):删除指定位置的内容
- StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
- StringBuffer insert(int offset, xxx):在指定位置插入xxx
- StringBuffer reverse() :把当前字符序列逆转