Я думаю, что мы можем пойти с MessageFormat.format
, так как это должно быть хорошо как с точки зрения читаемости, так и с точки зрения производительности.
Я использовал ту же программу, которая использовалась Icaro в его ответе выше, и я добавил в него дополнительный код для использования MessageFormat
для объяснения чисел исполнения.
public static void main(String[] args) {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
String s = "Hi " + i + "; Hi to you " + i * 2;
}
long end = System.currentTimeMillis();
System.out.println("Concatenation = " + ((end - start)) + " millisecond");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
String s = String.format("Hi %s; Hi to you %s", i, +i * 2);
}
end = System.currentTimeMillis();
System.out.println("Format = " + ((end - start)) + " millisecond");
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
String s = MessageFormat.format("Hi %s; Hi to you %s", i, +i * 2);
}
end = System.currentTimeMillis();
System.out.println("MessageFormat = " + ((end - start)) + " millisecond");
}
Конкатенация = 69 миллисекунд
Формат = 1435 миллисекунд
MessageFormat = 200 миллисекунд
ОБНОВЛЕНИЯ:
Согласно отчету SonarLint, строки формата в стиле Printf должны использоваться правильно (squid: S3457)
Поскольку строки формата в стиле printf интерпретируются во время выполнения, а не проверяются компилятором, они могут содержать ошибки, которые приводят к созданию неправильных строк. Это правило статически проверяет соответствие строк формата в стиле printf их аргументам при вызове методов format (...) java.util.Formatter, java.lang.String, java.io.PrintStream, MessageFormat и java.io. Классы .PrintWriter и методы printf (...) классов java.io.PrintStream или java.io.PrintWriter.
Я заменил стиль printf на фигурные скобки, и я получил кое-что интересное, как показано ниже.
Конкатенация = 69 миллисекунд
Формат = 1107 миллисекунд
Формат: фигурные скобки = 416 миллисекунд
MessageFormat = 215
миллисекунда
Формат сообщения: фигурные скобки = 2517 миллисекунда
Мой вывод:
Как я подчеркивал выше, использование String.format с фигурными скобками должно быть хорошим выбором для получения преимуществ хорошей читаемости, а также производительности.