public class StringBufferTest {
public static void main(String[] args) {
String a="a";
String b="b";
String c=a+b+1;
System.out.println(c);//此过程会创建5个对象,效率低
String d="a"+1+2+3+4+"b";//常量相加。性能没问题,编译器进行优化
/*
StringBuffer目的是来解决字符串相加时带来的性能问题(常量与变量)
StringBuffer内部实现采用字符数组,默认速度长度为16超过数组大小时动态扩充的算法是原来长度*2+2
所以当我们预知要添加数组长度时,建议使用带初始化容量的构造方法避免动态扩充的次数,从而提高效率
*/
StringBuffer sb=new StringBuffer();
sb.append("a").append("a").append("0");
System.out.println(sb.toString());
}
}
public class StringBuilderDemo2 {
/*
StringBuffer与StringBuilder区别:
StringBuffer:线程安全,性能比StringBuilder低一点,适合多线程使用
StringBuilder:线程不安全,性能高一点,适合单线程使用,这种情况占大多数
*/
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
/*
字符串相加操作:
多个常量相加性能不影响,在编译期间进行优化
变量间相加会产生多个垃圾对象
*/
String a="a"+1;
String b=a+"b";
String c=null;
for (int i = 0; i < 5; i++) {
c+=i;//每次循环会产生一个StringBuilder对象实现拼接,性能低,最好是手动创建StringBuilder来拼接
}
//字符串相加会在编译后,使用StringBuffer来优化代码,实现拼接
}
}