String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
StringBuilder
sb.append(temp) 将参数附加到序列中
sb.reverse() 导致该字符序列被序列的相反代替
sb.setCharAt(2, '马') 指定索引处的字符设置为ch
sb.insert(sb.length()-1, '!') 插入
sb.delete(10, 20) 删除索引位置之间的字符
sb.deleteCharAt(0) 删除索引位置的字符
public class StringBuilderTest {
public static void main(String[] args) {
/*
StringBuilder sb=new StringBuilder();
for(int i=0;i<26;i++) {
char temp=(char)('A'+i);
sb.append(temp); //增加 } System.out.println(sb);
}
sb.reverse(); //倒转 System.out.println(sb); sb.setCharAt(2, '马'); //替换
System.out.println(sb); sb.insert(sb.length()-1, '!'); //插入
System.out.println(sb); sb.delete(10, 20); //删除 System.out.println(sb);
sb.deleteCharAt(0); //删除 System.out.println(sb);
*/
//测试String和StringBuilider的性能
String s="";
long memory1=Runtime.getRuntime().freeMemory();
long time1=System.currentTimeMillis();
for(int i=0;i<5000;i++) {
s=s+i;
}
long memory2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
long time=time2-time1;
long memory=memory1-memory2;
System.out.println(time+" "+memory);
StringBuilder sb2=new StringBuilder();
memory1=Runtime.getRuntime().freeMemory();
time1=System.currentTimeMillis();
for(int i=0;i<5000;i++) {
sb2=sb2.append(i);
}
memory2=Runtime.getRuntime().freeMemory();
time2=System.currentTimeMillis();
time=time2-time1;
memory=memory1-memory2;
System.out.println(time+" "+memory);
}
}