StringBuffer和StringBuilder
String,StringBuffer,StringBuilder的异同:
String:不可变的字符序列。
StringBuffer:可变的字符序列,线程安全的,效率低。
StringBuilder:可变的字符序列,线程不安全的,效率高。
底层都是使用char[]存储。
StringBuffer分析
StringBuilder和StringBuffer只是差一个线程安全与否,底层实现都是一样的。
- new无参StringBuffer,底层默认创建了一个长度为16的数组
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.length()); //0
-
扩容问题:如果要添加的数据底层装不下了,需要扩容底层数组。默认情况下,扩容为原来容量的的2倍 + 2,同时将原有数组的元素复制到新的数组中。
所以开发中建议使用
StringBuffer(int capacity)或StringBuilder(int capacity),避免扩容降低效率。
小tips
length(),length,size()的区别:
- length():用于返回字符串的长度。
- length:数组的属性,代表数组长度。
- size():返回集合中元素的个数。
常用方法
StringBuilder同。
StringBuffer append(xxx):用于进行字符串拼接。
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() :把当前字符序列逆转。