哪个toString()方法可以使用性能明智?

M.J*_*.J. 6 java performance

我正在开发一个性能增强项目.我有一个疑问,当我们在一个过程中,我们倾向于追踪DTO和所用实体的当前状态.因此,为此,我们在所有POJO中都包含了toString()方法.我现在用以下三种不同的方式实现toString(): -

public String toString() {
    return "POJO :" + this.class.getName() + " RollNo :" + this.rollNo + " Name :" + this.name;
}

public String toString() {
    StringBuffer buff = new StringBuffer("POJO :").append(this.class.getName()).append(" RollNo :").append(this.rollNo).append(" Name :").append(this.name);
    return buff.toString();
}

public String toString() {
        StringBuilder builder = new StringBuilder("POJO :").append(this.class.getName()).append(" RollNo :").append(this.rollNo).append(" Name :").append(this.name);
        return builder .toString();
    }
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我找出哪一个是最好的,应该用于提高性能.

pol*_*nts 13

+在这种情况下,有一个是好的.它更具可读性,与StringBuilder/StringBuffer版本相比,它的性能也同样高,因为它不会在循环中发生.

如果你正在构建一个String循环内部,那么你应该经常使用StringBuilder.仅StringBuffer在您需要其synchronized功能时使用,这种情况不常发生.

简单地说(总是不正确,但这是一个很好的经验法则),除非你+=用a 做String,你真的不需要StringBuilder/StringBuffer.

相关问题


一个String.format选项

通常不考虑的一个选择是使用String.format.它看起来像这样:

return String.format("POJO : %s RollNo %s : Name : %s",
   this.getClass().getName(),
   this.rollNo,
   this.name
);
Run Code Online (Sandbox Code Playgroud)

我发现这是最易读和可维护的版本.

这更快吗?可能是可能不是.对于像这样的常见用例场景,它通常无关紧要toString().力求可读性,只有在分析表明有必要时才进行优化.

API链接


论阶级文学

我已经纠正了原始代码中的语法错误this.class(不编译)this.getClass().

也可以看看

相关问题

  • *"这更快吗?"* - 几乎可以肯定不是因为`format`必须解析格式字符串,调用者必须分配并填充varargs数组.但正如你所说,这可能并不重要. (3认同)

Boz*_*zho 9

使用第一个,因为它更具可读性.

但除此之外,没关系.

  • 使用StringBuilder+在这种情况下是等价的,因为编译器将重载的+运算符转换为a StringBuilder.

  • StringBuffer会慢一些,由于它的方法是synchronized,但由于逃逸分析(更具体-同步省音)由编译器(在较新版本)中使用的威力,它会自动删除该synchronized关键字.(请参阅JDK 6u14发行说明以了解转义分析)

  • 没那么快*"不幸的是,在更新14中启用的基于逃逸分析的优化已在更新18中再次禁用,以便在将来某个日期重新启用."* (3认同)
  • 自JDK 6u14以来@polygenelubricants可用,但我认为默认情况下不行.有关如何打开它的信息,请参见http://java.sun.com/javase/6/webnotes/6u14.html. (2认同)