我使用toString()方法。但我不知道哪种实现更好用,为什么:
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("Description: " + description + ";");
buffer.append("Price: " + price);
return buffer.toString();
}
public String toString() {
return "Description: " + description + ";" + "Price: " + price;
}
答案 0 :(得分:7)
就我个人而言,我会使用后者 - 它更清晰,实际上更多效率:
StringBuilder
类型而不是StringBuffer
"Price: " + price
和"Description: " + description + ";"
构建不必要的中间字符串,在Java 5+下,我希望将后一个代码编译为:
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Description: ");
builder.append(description);
builder.append(";");
builder.append("Price");
builder.append(price);
return builder.toString();
}
重要的一点是第二种形式的清晰度 - 但我发现它比第一种形式更容易阅读。一个有趣的观点是,在编译版本中有两个连续的调用追加字符串常量(我已经检查过)。这将是略微更有效 - 甚至更可读,IMO - 写:
public String toString() {
return "Description: " + description + ";Price: " + price;
}
答案 1 :(得分:3)
两者完全相同 *,与'+'运算符的连接有效地扩展为您作为第一个示例提供的StringBuffer构造。
(*)嗯,不完全是,如果在append方法中嵌套其他连接,可能会创建不必要的临时字符串,就像Jon Skeet指出的那样。在你的代码中没有注意到。我的坏。
答案 2 :(得分:0)
这只是个人偏好,因为它根据 documentation 编译相同:
编译器使用字符串缓冲区来实现二进制字符串 连接运算符+。例如,代码:
x = "a" + 4 + "c" is compiled to the equivalent of: x = new StringBuffer().append("a").append(4).append("c") .toString()
另外,我将@Override置于你的方法之上。
答案 3 :(得分:0)
通常,最好使用StringBuffer或StringBuilder。 StringBuffer和StringBuilder之间的不同之处在于StringBuffer是同步的。在您的示例中,我建议使用StringBuilder。
StringBuilder的分配频率会降低,当您执行此操作时,这可以提供显着的速度和内存管理改进。
请阅读以下有关此主题的更多内容:
Why to use StringBuffer in Java instead of the string concatenation operator