Я не собирался отвечать на этот вопрос, но здесь есть два ответа (за которые голосуют!), Которые просто неверны. Рассмотрим эти выражения:
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, поэтому лучше оставить все как есть. Компилятор знает, что лучше в этом отношении.