StringBuffer代表着可变的字符序列, 线程安全,效率相对于String快 相对于StringBuilder较低

底层也是char [] 来存储的

java.lang.StringBuffer代表可变的字符序列,JDK1.0中声明,可以对字符 串内容进行增删,此时不会产生新的对象。

 很多方法与String相同。
 作为参数传递时,方法内部可以改变值。

StringBuffer类不同于String,其对象必须使用构造器生成。有三个构造器:

StringBuffer():初始容量为16的字符串缓冲区 
StringBuffer(int size):构造指定容量的字符串缓冲区
StringBuffer(String str):将内容初始化为指定字符串内容

源码分析:

  String str = new String();  // 相当于 char [] value = new char[0]; String的底层实现就是char []               
  String str1 = new String("abc"); // 相当于 char [] value = new char []{"a","b", "c"}                  

  StringBuffer sb1 = new  StringBuffer();  char [] value =  new char [16]; 底层创建了一个长度为16的char数组
  system.out.println(sb1.length()); // 0 虽然他的底层数组长度为16 但是他本身的length仍然是0                              

  StringBuffer sb2 = new StringBuffer("abc"); // char [] value = new char["abc".length()+16]         

问题: 

StringBuffer sb2 = new StringBuffer("abc")

写出输出内容:
system.out.println(sb2);


是3 虽然它的底层是16 只是代表可以放置的  而他本身的是count统计出来的是3,  

StringBuffer扩容问题:

StringBuffer虽然默认创建一个可以存放16的char [] 容器, 如果超出这个长度需要扩容, 默认情况下扩容为原来容器的2倍+2,并且把原有数组的元素都复制到新数组中

指导: 在开发中建议大家一初始就使用: StringBuffer(int capacity) 一初始就指定长度防止后面再扩容

 

StringBuffer的方法

可变的字符串序列
StringBuffer的常用方法


append()  在最后的位置上添加一个字符, 常用语拼接

delete(int start, int end); 删除指定位置的内容
replace(int start, int end, String str); 把[start end)的内容替换为str
insert(String str); 指定位置插入str
reverse(); 把当前字符串翻转
indexOf() 根据内容查下标
charAt() 根据下标查内容 subString() ; 截取字符串 左闭右开 setCharAt(
int n, char ch); 改变指定位置的字符 增: append() 删: delete() 查: charAt(int n) 根据下标查内容, indexOf(String str) 根据内容查下标 改: setCharAt();修改其中的一个字符, replace()修改其中的一段字符 插入: insert()

以 StringBuffer  stringBuffer = new StringBuffer("abc"); 为 例

12-23 12:21