2014-12-07 2 views
2

В чем разница между этими кодовыми блоками - есть ли разница в производительности или памяти или другой?Разница между форматированной строкой и простой строкой

первый код:

String name = "Jack"; 
String familyName = "Hunter"; 

String result = String.format("Your name is %s %s",name, familyName); 

и второй код:

String name = "Jack"; 
String familyName = "Hunter"; 

String result = "Your name is " + name + " " + familyName; 

спасибо за ухаживания ;-)

+0

Есть некоторые результаты здесь: [Должен ли я использовать String.format(), если производительность важна?] (Http://stackoverflow.com/questions/513600/should-i-use-javas-string-format- if-performance-is-important) – Obicere

ответ

2

Там нет никакой разницы с точки зрения выхода она производит. Переменная result будет иметь одно и то же содержимое в каждом случае.

Но есть String.format(), так что вы можете сделать более мощное форматирование, включая указание числа десятичных знаков для чисел с плавающей запятой и тому подобное.

Я ожидал бы, что версия String.format() будет относительно медленной, просто потому, что она более мощная и должна проверять содержимое строки формата перед выполнением практически той же операции, что и в вашей второй версии. Другими словами, он должен потратить некоторое время на разработку того, что вы хотите сделать, тогда как во второй версии компилятор может решить эту проблему сам по себе.

Но, действительно, выбор одного из ваших фрагментов над другим здесь по соображениям производительности выглядит как микро-оптимизация, которая почти никогда не окупится. Если у вас нет четкой потребности в производительности (т. Е. Это работает в узком цикле для чего-то критичного для производительности), вы должны пойти на тот, который более читабельен.

+0

Чтобы быть справедливым, производительность второго кода должна быть намного быстрее. И второй код будет изменен для использования 'StringBuilder', поэтому производительность будет одинаковой. – Obicere

+0

@Obicere означает, что компилятор будет внутренне использовать 'StringBuilder' для цепочки' String ', объединенные вместе за один раз? Это похоже на очевидную оптимизацию, хотя я не знал, что это сделал компилятор. –

+0

yep! Просто одна из замечательных особенностей компилятора Java. – Obicere

Смежные вопросы