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