В любом проекте Java-программист использует строки, где-то больше, где-то меньше, но в любом случае надо уметь работать со строками и работать правильно. Поэтому сегодня мы рассмотрим одну очень важную тему по работе со строками: «Конкатенация строк — способы и примеры«.
Наверняка вы уже слышали, что при работе со строками, а именно конкатенацией, не желательно использовать оператор «+». Для этих целей следует использовать StringBuffer или StringBuilder. Следует отметить, что этот вопрос является одним из самых часто задаваемых во время собеседования на должность Java Junior Developer по Java Core.
Но все же давайте рассмотрим все наиболее используемые способы объединения строк и проанализируем то, что происходит «по капотом» этих методов.
Конкатенация строк с помощью оператора «+»
PlusOperator.java
1 2 3 4 5 6 7 8 9 10 11 |
package ua.com.prologistic.stringutils; public class PlusOperator { public static void main(String args[]){ String simpleString = new String ("Prologistic"); // объединение строк с помощью оператора "+" simpleString += ".com.ua"; } } |
Конкатенация строк с помощью StringBuffer
Теперь давайте рассмотрим ту же программа, но с использованием StringBuffer:
StringBufferExample.java
1 2 3 4 5 6 7 8 9 10 11 |
package ua.com.prologistic.stringutils; public class StringBufferExample { public static void main(String args[]){ StringBuffer stringBuffer = new StringBuffer("Prologistic"); // объединение строк с помощью StringBuffer stringBuffer.append(".com.ua"); } } |
Код конкатенации строк с помощью StringBuilder будет аналогичен выше приведенному.
Анализ производительности оператора «+» и StringBuffer
Итак, давайте посмотрим что происходит «под капотом» нашей программы, когда мы используем оператор «+» и StringBuffer или StringBuilder.
Когда мы объединяем строки с помощью оператора «+», происходит следующее:
- Создается новый объект StringBuilder.
- Строка «Prologistic» копируется в только что созданный объект StringBuilder.
- Вызывается метод
append()
для добавления строки «.com.ua» к объекту StringBuilder. - Вызывается метод
toString()
для получения объекта типа String с объекта StringBuilder. - Ссылка на только что созданный объект типа String присваивается simpleString, а старая строка «Prologistic» становится доступной для сборщика мусора.
А что же происходит, если мы используем StringBuffer или StringBuilder:
- Создается новый объект StringBuffer со значением «Prologistic».
- Вызывается метод
append()
для добавления строки «.com.ua» к объекту. - Вызывается метод
toString()
для получения объекта типа String с объекта StringBuffer.
Судя по количеству действий, необходимых для конкатенации строк, способ с использованием StringBuffer или StringBuilder является менее трудоемким, использует меньше ресурсов и производит меньше мусора для уборщика мусора.
Следите за обновлениями на Javadevblog.com, чтобы узнать советы по эффективному использованию StringBuilder и StringBuffer.