Eclipse自动生成toString()方法

时间:2012-12-30 04:54:13

标签: java eclipse tostring

据我所知,当你有大量的String时,使用+符号的结合字符串不是一个好习惯。但是当我检查eclipse生成的toString()方法时(写点击源文件 - > Source - > Generate 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中的bellow或为什么eclipse不考虑它。

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

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

请建议我。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

<块引用>

"Use StringBuilder instead of StringBuffer" clean up

<块引用>

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

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

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

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

Preferences -- https://www.eclipse.org/eclipse/news/4.21/images/stringbuffer-to-stringbuilder-prefs.png

示例:

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

会变成:

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