5

据我所知,当您有大量字符串时,使用 + 号连接字符串不是一个好习惯。但是当我检查 eclipse 生成的 toString() 方法时(点击源文件 -> 源 -> 生成 toString() )它具有相同的。

public class Temp
 {
      private String tempName;
      private String tempValue;

      // here getters and setters

  /* (non-Javadoc)
         * @see java.lang.Object#toString()
  */
@Override
public String toString() {
    return "Temp [tempName=" + tempName + ", tempValue=" + tempValue + "]";
}

}

是否有任何地方可以像我预期的 toString() 方法一样配置,如 Eclipse 中的波纹管或为什么 Eclipse 不考虑这一点。

   public String expectedToString(){
    StringBuffer sb = new StringBuffer();
    sb.append("Temp [tempName=").append(tempName).append(",").append(" tempValue=").append(tempValue).append("]");
    return sb.toString();
}

我将使用自动生成的 toString() 方法来记录我的对象值。

请给我建议。

4

2 回答 2

8

无需更改任何内容,它紧凑且易于阅读,javac 将使用 StringBuilder 进行实际连接,如果您反编译 Temp.class,您将看到

public String toString() {
   return (new StringBuilder("Temp [tempName=")).append(tempName).append(", tempValue=").append(tempValue).append("]").toString();
}

但在其他情况下,比如

    String[] a = { "1", "2", "3" };
    String str = "";
    for (String s : a) {
        str += s; 
    }

+或者+=是真正的性能杀手,请参阅反编译代码

String str = "";
for(int i = 0; i < j; i++) {
    String s = args1[i];
    str = (new StringBuilder(String.valueOf(str))).append(s).toString();
}

在每次迭代中,都会创建一个新的 StringBuilder,然后将其转换为 String。在这里你应该明确地使用 StringBuilder

    StringBuilder sb = new StringBuilder();
    for (String s : a) {
        sb.append(s); 
    }
    String str = sb.toString();
于 2012-12-30T05:18:59.093 回答
0

请注意,Eclipse 4.21(2021 年 7 月,9 年后)将有助于生成正确的代码:

“使用 StringBuilder 而不是 StringBuffer”清理

添加了一个新的清理,将代码转换为使用StringBuilder(在 Java 1.5 中添加),而不是StringBuffer具有同步方法并且比 using 慢StringBuilder

有一个子选项,其中更改只会发生在默认情况下启用的局部变量。
当此子选项打开时,只会对StringBuffer方法本地的变量进行更改。
当一个方法使用这些变量调用其他方法或分配给/从字段/参数时,方法内容将不会被转换。
允许将 StringBuffer 字段或参数附加到局部StringBuffer变量,然后仍然可以转换为StringBuilder.

选择该选项并关闭“本地变量的子选项”时,无论使用如何,StringBuffer所选文件中的所有使用情况都会更改为。 应该注意的是,在这种情况下,清理将不会跟踪引用的未选择的类和方法,并且可能需要更改才能成功编译。StringBuilder

要应用清理,请选中清理配置文件中选项卡Use StringBuilder instead of StringBuffer上的复选框。 要仅指定局部变量,请选中下方的复选框。Optimization
Only for local variables

首选项——https://www.eclipse.org/eclipse/news/4.21/images/stringbuffer-to-stringbuilder-prefs.png

例子:

之前——https://www.eclipse.org/eclipse/news/4.21/images/stringbuffer-to-stringbuilder-before.png

会成为:

之后——https://www.eclipse.org/eclipse/news/4.21/images/stringbuffer-to-stringbuilder-after.png

于 2021-07-11T03:39:40.600 回答