String ,StringBuffer,StringBuilder三者之间的异同

String :不可变的字符序列;底层使用char[]存储
StringBuffer:可变的字符序列;线程安全,效率低,底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增,线程不安全,效率高,底层使用char[]存储

源码分析:

String str=new String();//char[]  value=new char[0];
String tsr1=new String("abc");//char [] value=new char[]{"a","b","c"};
StringBuffer sb1=new StringBuffer();//char []  value=new char[16];
System.out.println(sb1.length());
sb1.append("a");//value[0]="a";
sb1.append("b");//value[1]="b";
StringBuffer sb2=new StringBuffer("abc");//char[] value=new char[sb2.length()+16];
System.out.println(sb2.length());//3

扩容问题:
如果要添加的数据底层数组盛不下,那就需要扩容底层的数组
默认条件下,扩容为原来容量的2倍+2,同时将原来数组中的元素复制到新的数组中。

你可能感兴趣的:(java,字符串)