String底层皆是字符数组
StringBuffer
可变字符串:内容改变,对象不变
案例:使用String,stringBUFFER,StringBuilder拼接三万次字符串,对比各自损耗的时间
public class CharSectionDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
CharSectionDemo.stringTest();//1147ms
CharSectionDemo.stringBufferTest();//2ms
CharSectionDemo.stringBuilderTest();//1ms
}
public static void stringTest() {
String str = "";
long start = System.currentTimeMillis();
for(int i = 0;i<30000;i++) {
str +=i;
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
public static void stringBuilderTest() {
StringBuilder str = new StringBuilder("");
long start = System.currentTimeMillis();
for(int i = 0;i<30000;i++) {
str.append(i);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
public static void stringBufferTest() {
StringBuffer str = new StringBuffer();
long start = System.currentTimeMillis();
for(int i = 0;i<30000;i++) {
str.append(i);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
StringBuffer:线程安全,方法皆使用sychonized修饰
StringBuilder:线程不安全,但推荐使用
StringBuilder strBui = new StringBuilder(80);
strBui.append("A");
strBui.charAt(index);
strBui.delete(start, end);
strBui.deleteCharAt(index);