我听说编译器(或者是JVM?)会自动为某些字符串连接使用StringBuilder。那么什么时候需要显式声明呢?如果不需要考虑线程安全,就不需要用StringBuffer。
谢谢。
谢谢。
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
。
StringBuilder
:String str = ""; str += <something that isn't a compile-time constant>
。 - Matt BallStringBuilder
将被使用,但在我第一个评论中的连接操作中,它将生成等效于new StringBuilder().append("foo").append(<something that...>).toString();
的字节码。啊,我也应该在那个评论中将str
初始化为非空字符串。 - Matt BallStringBuilder
实例。 - Jon Skeet