StringBuffer、StringBuilder
- String、StringBuffer、StringBuilder异同?
- String:不可变的字符序列;底层使用char【】存储
- StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char【】存储
- StringBuilder:可变的字符序列;线程不安全,效率高;底层使用char【】存储
1. 源码分析
-
StringBuffer sb1=new StringBuffer(); //底层创建了一个长度为16的数组 char[] value=new char(16); sb1.append('a'); //value【0】='a'; sb1.append('b'); //value【1】='b'; StringBuffer sb2=new StringBuffer("abc"); //char[] value=new char[abc.length()+16];
-
System.out.println(sb2.length()) ----------------> 是3,length是返回的count,不用想那么多
-
扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层数组:
- 默认情况下扩容为原来容量的2倍+2,同时将原有数组中的元素copy给新数组中
- 开发过程中,建议大家使用:StringBuffer(int capacity) 或者StringBuilder(int capacity)
-
效率对比:
从高到低排列:StringBuilder > StringBuffer > String
2. StringBuffer常用方法
注意:
replace()方法是把【start,end)位置替换,左闭右开
substring方法是返回一个从start开始到end结束的左闭右开区间的子字符串