区别:
String是不可变字符序列,例:
String str1="a";
for(int i=0;i<=100;i++){
str1=str1+i;
}
}
此时会生成200个String对象(不可取):str1(str1+i)一个对象,i一个对象
正确写法为:
StringBuilder str2 = new StringBuilder();
for(int j=0;j<=100;j++){
str2.append(j);
}
StringBuffer和StringBuilder均为可变字符序列
- 子方法与String类大相庭径
- StringBuffer线程安全,效率低
- StringBuilder线程不安全,效率高
常用方法练习:
StringBuilder sb = new StringBuilder("abcdefghijklmnopqrst");
sb.append('u'); //在最后加u
sb.insert(0,'啊'); //在0处插入啊
sb.setCharAt(1,'是'); //更改第二位为是
sb.setLength(10); //更改长度为10
sb.delete(3,4); //删除第四位到第五位
sb.deleteCharAt(5); //删除第六个字符
System.out.println(sb);
测试:
long num1=Runtime.getRuntime().freeMemory();
long time1=System.currentTimeMillis();
String str1="a";
for(int i=0;i<=10000;i++){
str1=str1+i;
}
long num2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
long num3=Runtime.getRuntime().freeMemory();
long time3=System.currentTimeMillis();
StringBuilder str2 = new StringBuilder();
for(int j=0;j<=10000;j++){
str2.append(j);
}
long num4=Runtime.getRuntime().freeMemory();
long time4=System.currentTimeMillis();
System.out.println("String消耗的内存为:"+(num1-num2));
System.out.println("String消耗的时间为:"+(time2-time1));
System.out.println("String消耗的内存为:"+(num3-num4));
System.out.println("String消耗的时间为:"+(time4-time3));
结果:
String消耗的内存为:2310056
String消耗的时间为:563
StringBuilder消耗的内存为:285736
StringBuilder消耗的内存为:0
由此结果可见写代码时需用StringBuilder方法,效率高