字符串拼接在开发过程中是非常平凡的常用的有三种方式
1、加号拼接(str+“123”)
2、StringBuilder拼接
3、StringBuffer拼接
StringBuffer是保证线程安全的,效率是比较低的,更多的应用场景是不会涉及到线程安全,所以会选择StringBuilder效率会高一些,那么问题来了StringBuilder和“+”谁的效率更高呢?
public class Test {
public static void main(String[] args) {
new Test3().m1();
new Test3().m2();
}
public void m1(){
String s1 = "123";
String s2 = "456";
String s3 = s1 + s2;
System.out.println(s3);
}
public void m2(){
String s1 = "123";
String s2 = "456";
StringBuilder sb = new StringBuilder();
sb.append(s1);
sb.append(s2);
String s3 = sb.toString();
System.out.println(s3);
}
}
通过查看字节码的方式看到以上程序使用加号在编译成字节码后编译的内容是StringBuilder 所以"+"和StringBuilder编译之后还是StringBuilder,所以效率是一样的
public class Test4 {
public static void main(String[] args) {
new Test4().m1();
new Test4().m2();
}
public void m1(){
String str = "";
for (int i = 0; i < 5; i++){
str = str + i;
}
System.out.println(str);
}
public void m2(){
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(i);
}
System.out.println(sb.toString());
}
}
通过查看字节码发现 m1的方法内每次循环都会船舰一个StringBuilder对象,效率低于m2()方法
总结 “+”和StringBuilder两种拼接方式是一样的,所以效率是一样的,但是在for循环中,使用“+”号拼接,每循环一次都要重新创建一个StringBuilder对象用来存储新的字符串,所以在for循环中 StringBuilder效率更高