String、StringBuilder与StringBuffer

108 阅读1分钟
StringBuilderStringBuffer的区别
  • StringBuffer是线程安全的,方法加了synchronize关键字
  • StringBuilder非线程安全、但性能更高
JDK对String+拼接的优化

jdk编译时String的加号拼接优化成StringBuilder的append,如:

// 简单的字符串拼接
String str = "aa"+"bb"+"cc";
System.out.println(str);

// 不确定的复杂情况
String str1 = "aa" + "bb" + "cc";
for (int i = 0; i < 5; i++) {
    str1 = str1 + i;
}
System.out.println(str1);

优化结果:

String str = new StringBuilder().append("aa").append("bb").append("cc")    
.toString();
System.out.println(str);

str1 = new StringBuilder().append("aa").append("bb").append("cc").toString();
for (int i = 0; i < 5; i++) {
    str1 = new StringBuilder().append(str1).append(i).toString();
}
System.out.println(str1);

可见jdk优化后,对于简单的字符串拼接只需要创建一个StringBuilder对象,但jdk对复杂的情况如循环的字符串拼接,则没有优化效果,每次循环仍要重新创建新的StringBuilder对象