MST
星途 面试题库

面试题:Java中String构建高效字符串处理逻辑之拼接问题

在Java中,有如下需求:需要拼接1000个字符串,分别说明使用String的`+`操作符、StringBuilder和StringBuffer来实现的优缺点,并且给出性能测试代码示例。
20.5万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

使用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");
    }
}