我正在开发一个性能增强项目.我有一个疑问,当我们在一个过程中,我们倾向于追踪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().力求可读性,只有在分析表明有必要时才进行优化.
我已经纠正了原始代码中的语法错误this.class(不编译)this.getClass().
使用第一个,因为它更具可读性.
但除此之外,没关系.
使用StringBuilder和+在这种情况下是等价的,因为编译器将重载的+运算符转换为a StringBuilder.
该StringBuffer会慢一些,由于它的方法是synchronized,但由于逃逸分析(更具体-同步省音)由编译器(在较新版本)中使用的威力,它会自动删除该synchronized关键字.(请参阅JDK 6u14发行说明以了解转义分析)
| 归档时间: |
|
| 查看次数: |
3087 次 |
| 最近记录: |