2010-11-23 60 views
9

我听说编译器(或者它是JVM?)会自动使用StringBuilder进行一些字符串连接。什么时候明确宣布一个?我不需要一个StringBuffer来保证线程安全。什么时候StringBuffer/StringBuilder没有被编译器隐式使用?

谢谢。

+1

可能的重复[Java Compiler在一行中看到很多字符串连接时会发生什么?](http://stackoverflow.com/questions/1296571/what-happens-when-java-compiler-sees-many-string-串联在一行) – 2010-11-23 23:37:26

+1

注意:其中将不使用StringBuilder的一种情况是在编译时可串联字符串。在这种情况下,它只产生一个单独的字符串(没有StringBuilder) – 2010-11-24 09:28:08

回答

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); 

另一种情况是,你想在多个方法来建立一个字符串,或可能conditionalise建筑的一些位。基本上,如果你没有在单个语句中编译字符串(编译器可以帮助你),你至少应该考虑使用StringBuilder

相关问题