package StringTest;
import org.junit.Test;
/*
*关于String Buffer和Builder的使用
* String不可变的字符序列:底层结构使用char[]型数组
* String Buffer可变的字符序列:线程安全的,效率偏低,底层结构使用char[]型数组
* String Builder可变的字符序列:jdk5.0新增,线程不安全,效率高,底层结构使用char[]型数组
*
*
* 源码分析:
* String str = new String() ; //new char[0]
* String str1 = new String("abc") ; //new char[]{'a','b','c'}
*
* StringBuffer sb1 = new StringBuffer() ; //char[] value = new char[16]底层创建了一个长度是16的数组
* sb1.oppend('a') ; //value[0] = 'a'
* sb1.oppend('b') ; //value[1] = 'b'
*
* StringBuffer sb1 = new StringBuffer("abc") ; //char[] value = new char[ "abc".length() + 16 ]
*
* 问题1. Sysytem.out.println(sb2.length()); //返回3,输出的是count
* 问题2. 扩容问题,超过16个继续增加数据,需要扩容底层数组
* 尽量避免扩容,不然要复制一次
* 尽量使用StringBuffer(int)指定容量
*/
public class StringBufferBuilderTest {
@Test
public void test(){
StringBuffer sb1 = new StringBuffer("abc");
sb1.setCharAt(0,'m');
System.out.println(sb1);
StringBuffer sb2 = new StringBuffer();
System.out.println(sb2.length());
}
}