代码之家  ›  专栏  ›  技术社区  ›  Jon Onstott

什么时候编译器不隐式使用StringBuffer/StringBuilder?

  •  9
  • Jon Onstott  · 技术社区  · 14 年前

    我听说编译器(或者是JVM?)将自动使用StringBuilder进行某些字符串连接。什么时候是明确声明的时候?我不需要StringBuffer来保证线程安全。

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  14
  •   Jon Skeet    14 年前

    编译器将自动使用它进行任何使用“+”的字符串连接。

    如果希望在循环中连接,通常会显式地使用它。例如:

    StringBuilder builder = new StringBuilder();
    for (String name : names)
    {
        builder.append(name);
        builder.append(", ");
    }
    if (builder.length() > 0)
    {
        builder.setLength(builder.length() - 2);
    }
    System.out.println("Names: " + builder);
    

    另一种情况是,您希望在多个方法上构建一个字符串,或者可能对构建的某些部分进行条件化。基本上,如果不是在一条语句中构建字符串(编译器可以帮助您),至少应该考虑使用 StringBuilder .