我不打算回答这个问题,但这里有两个答案(正在被投票!)这是完全错误的。考虑这些表达式:
String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";
第一个是在编译时评估的。第二个是在运行时评估的。
所以永远不要用 StringBuilder、StringBuffer 等替换常量连接(任何类型)。仅在涉及变量的情况下使用那些,并且通常仅在您附加大量操作数或在循环中附加时使用。
如果字符是恒定的,这很好:
String s = "" + 'a' + 'b' + 'c';
但是,如果不是,请考虑以下问题:
String concat(char... chars) {
if (chars.length == 0) {
return "";
}
StringBuilder s = new StringBuilder(chars.length);
for (char c : chars) {
s.append(c);
}
return s.toString();
}
作为适当的解决方案。
然而,有些人可能会倾向于优化:
String s = "Name: '" + name + "'"; // String name;
进入这个:
String s = new StringBuilder().append("Name: ").append(name).append("'").toString();
虽然这是善意的,但底线是不要。
为什么?正如另一个答案正确指出的那样:编译器会为您执行此操作。所以在你自己做的时候,你不允许编译器优化代码或者不取决于它是否是一个好主意,代码更难阅读并且它不必要的复杂。
对于低级优化,编译器比你更擅长优化代码。
让编译器完成它的工作。在这种情况下,最坏的情况是编译器隐式地将您的代码更改为您编写的代码。连接 2-3 个字符串可能比构造 StringBuilder 更有效,因此最好保持原样。编译器知道在这方面什么是最好的。