Java StringBuilder-使用串联与在循环中使用附加

Java StringBuilder-使用串联与在循环中使用附加,java,string,performance,stringbuilder,Java,String,Performance,Stringbuilder,想知道最好的使用方法是什么: StringBuilder query = new StringBuilder(" Select * from mytable t where "); for ( Object object : objects ) { query.append(" t.field = " + object.field ); // this one OR query.append( object.field ); // this on

想知道最好的使用方法是什么:

StringBuilder query = new StringBuilder(" Select * from mytable t where ");
for ( Object object : objects ) {
     query.append(" t.field = " + object.field ); // this one OR
     query.append( object.field );                // this one? 
}

不确定建议使用哪一个。

字符串生成器的速度要快得多,因此不建议使用超过3-4个字符串(在循环之外)的串联,也不建议使用循环,我建议您这样做:

for ( Object object : objects ) {
     query.append(" t.field = ");
     query.append( object.field ); 
}

字符串生成器的速度要快得多,因此不建议对超过3-4个字符串(在循环之外)进行串联,也不建议在循环中进行串联,我建议您这样做:

for ( Object object : objects ) {
     query.append(" t.field = ");
     query.append( object.field ); 
}

使用append。但是,请注意,如果您执行的循环相对较少(比如10-20),那么使用StringBuilder并不重要,您可能看不到任何性能改进。

使用append。但是,请注意,如果您执行的循环相对较少(比如10-20),那么使用StringBuilder并不重要,您可能看不到任何性能改进。

append的两个单独调用更好。在幕后,对字符串使用
+
会导致创建一个
StringBuilder
来进行连接。因此,您希望:

  • 使用
    +
    (在动态情况下不起作用)一次连接所有字符串,或者

  • 使用显式的
    StringBuilder
    ,对正在构建的字符串的每一小段调用
    append
    (不要在任何地方使用
    +


  • append
    的两个单独调用更好。在幕后,对字符串使用
    +
    会导致创建一个
    StringBuilder
    来进行连接。因此,您希望:

  • 使用
    +
    (在动态情况下不起作用)一次连接所有字符串,或者

  • 使用显式的
    StringBuilder
    ,对正在构建的字符串的每一小段调用
    append
    (不要在任何地方使用
    +


  • 还有
    query.append(“t.field=”).append(object.field)StringBuilder在这种特殊情况下似乎有点过头了。还有
    query.append(“t.field=”).append(object.field)StringBuilder似乎有些过分。