StringBuilder是否应始终用于字符串操作?

Dav*_*ave 2 java

可能重复:
何时在java中使用StringBuilder

如果不是这些代码中哪一个更好,为什么

public String backAround(String str) {
   int len = str.length();
   StringBuilder sb = new StringBuilder(str);
   char chEnd = sb.charAt(len-1);
  if(len > 0){
  sb = sb.append(chEnd);
  sb= sb.insert(0,chEnd);

  str= sb.toString();
  return str;

  }else{ return str;}
}
Run Code Online (Sandbox Code Playgroud)

要么

public String backAround(String str) {
  // Get the last char
  String back = str.substring(str.length()-1, str.length());
  return back + str + back;
}
Run Code Online (Sandbox Code Playgroud)

Nei*_*fey 6

如果你只是像在backAround()方法中那样"将几个元素粘在一起",那么你也可以使用+表示法.编译器会将此转换为适当的StringBuilder.append(),所以为什么要打扰'拼出'.

明确使用StringBuilder的想法是,原则上您可以手动优化元素附加到字符串的精确程度,包括设置初始缓冲区容量并确保您不会意外地创建在不需要的情况下不必要的中间String对象.编译器可能无法预测这些事情.

基本上,当有一些稍微复杂的逻辑来决定附加到字符串的内容时,显式地使用StringBuilder .例如,如果要在循环中追加内容,或者附加的内容取决于不同点的各种条件.另一种可能使用StringBuilder的情况是,如果字符串需要从各种方法构建,例如:您可以将StringBuilder传递给不同的方法并要求它们附加各种元素.

PS我应该说StringBuilder也会为你带来更多的编辑能力(例如,你可以设置它的长度),并且,如果存在Appendable接口,你实际上可以创建更多通用的方法,这些方法可以附加到StringBuilder或者例如StringWriter.但这些是边缘情况,我会提交.