我有一个问题,我必须以两种不同的方式连接两个或多个字符。方法1如下:
String s = "";
for( int i = 0; i < 10; ++i ){
StringBuffer t = new StringBuffer();
t.append( s );
t.append( i );
t.append( " " );
s = t.toString();
}
第二种方法是:
StringBuffer b = new StringBuffer();
for( int i = 0; i < 10; ++i ){
b.append( i );
b.append( ' ' );
}
String s = b.toString();
在书中(公开的编程访谈)中提到第二种方法的编码更有效。为什么会这样呢?是因为Stringbuffer的对象t最初不是在for循环内重复出现的。需要澄清。
答案 0 :(得分:1)
方法1定义了一个新的StringBuffer,并在每次迭代时调用toString(),与方法2相比,方法2仅创建一次StringBuffer,并且仅调用一次toString(),因此使用了更多的操作和内存。
答案 1 :(得分:1)
您在这里。我的评论指出了第一种方法的额外开销。
String s = "";
for( int i = 0; i < 10; ++i ){
// create this for each iteration
StringBuffer t = new StringBuffer();
// extra method call to add string in progress
t.append( s );
t.append( i );
// more overhead appending string than a char
t.append( " " );
// convert StringBuffer to a string to append back in later
s = t.toString();
}
对于这两种方法,应优先使用StringBuilder而不是StringBuffer。当使用线程时,后者是首选的,因为它是同步的。因此,如果您不使用线程,请使用StringBuilder。
答案 2 :(得分:0)
您的方法1正在消耗大量不必要的内存,与方法2相比,它不是必需的。 即使您可以使用StringBuilder代替StringBuffer,您也可以阅读javadoc,这是为什么StringBuilder比StringBuffer快n以及为什么需要使用什么的原因。