String vs StringBuffer.IDEA的提示

Dmi*_*edv 2 java performance intellij-idea stringbuffer

Intellij Idea提供更换以下内容:

StringBuffer sb = new StringBuffer();
sb.append("Name=").append(name).append(", name2=").append(name2).append(", list=").append(list);
return sb.toString();
Run Code Online (Sandbox Code Playgroud)

至:

return "name=" + name + ", name2=" + name2 + ", list=" + list;
Run Code Online (Sandbox Code Playgroud)

据我所知,它不太有效(可变/不可变).那么,更好的是什么?

JB *_*zet 7

第二个编译为与第一个相同的字节代码,除了它使用非同步StringBuilder而不是同步StringBuffer.所以它不仅更具可读性,而且速度更快.我会选择第二个.

StringBuilder在循环中连接时使用a 非常有用,以避免创建许多临时String对象:

String result = "";
for (String element : array) {
    result += element;
}
Run Code Online (Sandbox Code Playgroud)

应该被替换

StringBuilder builder = new StringBuilder();
for (String element : array) {
    builder.append(element);
}
String result = builder.toString();
Run Code Online (Sandbox Code Playgroud)

  • ...理想情况下提供可能保存结果的字符串构建器的大小,因此您不会从 16 个字符的默认大小中获得所有这些重新分配。 (2认同)