我不打算回答这个问题,但这里有两个答案(正在被投票!)是完全错误的。请考虑以下表达式:
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 更有效,因此最好保持原样。编译器在这方面最清楚什么。