使用String
的+
操作符
- 优点:代码简洁直观,在拼接少量字符串时很方便。
- 缺点:由于
String
是不可变类,每次使用+
操作符都会创建一个新的String
对象,拼接1000个字符串会产生大量临时对象,性能较低,占用大量内存。
使用StringBuilder
- 优点:可变字符序列,通过
append
方法拼接字符串,不会产生大量临时对象,性能较好。适用于单线程环境。
- 缺点:非线程安全。
使用StringBuffer
- 优点:可变字符序列,通过
append
方法拼接字符串,性能较好。并且是线程安全的,适用于多线程环境。
- 缺点:由于线程安全机制,在单线程环境下性能略低于
StringBuilder
。
性能测试代码示例
public class StringConcatenationPerformanceTest {
public static void main(String[] args) {
// 使用String的+操作符测试
long startTime1 = System.currentTimeMillis();
String result1 = "";
for (int i = 0; i < 1000; i++) {
result1 += "a";
}
long endTime1 = System.currentTimeMillis();
System.out.println("使用String的+操作符拼接时间: " + (endTime1 - startTime1) + " ms");
// 使用StringBuilder测试
long startTime2 = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("a");
}
String result2 = sb.toString();
long endTime2 = System.currentTimeMillis();
System.out.println("使用StringBuilder拼接时间: " + (endTime2 - startTime2) + " ms");
// 使用StringBuffer测试
long startTime3 = System.currentTimeMillis();
StringBuffer sbuffer = new StringBuffer();
for (int i = 0; i < 1000; i++) {
sbuffer.append("a");
}
String result3 = sbuffer.toString();
long endTime3 = System.currentTimeMillis();
System.out.println("使用StringBuffer拼接时间: " + (endTime3 - startTime3) + " ms");
}
}