字符串拼接
方式
-
+,
-
Join,
-
StringBuffer,(线程安全, appent()方法使用了sychronized,线程安全)
-
StringBuilder或String.concat(),线程不安全
效率
public static void main(String[] args) {
//+
long tick01 = System.currentTimeMillis();
String tar = "";
for (int i = 0; i < 1000000; i++) {
tar += i;
}
long tick02 = System.currentTimeMillis();
System.out.println(tar.length() + ", + cost: " + (tick02 - tick01) );
//Join
ArrayList<String> lst = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
lst.add(String.valueOf(i));
}
long tick11 = System.currentTimeMillis();
String tar2 = String.join(",", lst);
long tick12 = System.currentTimeMillis();
System.out.println(tar2.length() + ", String.join cost: " + (tick12 - tick11) );
//StringBuffer
StringBuffer sb = new StringBuffer();
long tick21 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
sb.append(i);
}
String tar3 = sb.toString();
long tick22 = System.currentTimeMillis();
System.out.println(tar3.length() + ", StringBuffer cost: " + (tick22 - tick21) );
//StringBuilder
StringBuilder sbd = new StringBuilder();
long tick31 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
sbd.append(i);
}
String tar4 = sbd.toString();
long tick32 = System.currentTimeMillis();
System.out.println(tar4.length() + ", StringBuilder cost: " + (tick32 - tick31) );
}
//结果
5888890, + cost: 1029756
6888889, String.