StringBuilder与StringBuffer的区别
- 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对象