Что такое объединение (concatenation) строк в Java?

Ответ

Объединение строк (конкатенация) в Java — это операция создания новой строки путем соединения двух или более строк или других объектов.

Основные способы:

  1. Оператор + — простой, но неэффективный для циклов.

    String hello = "Hello";
    String world = "World";
    String result = hello + " " + world; // "Hello World"
  2. Метод String.concat() — альтернатива +.

    String result = hello.concat(" ").concat(world);
  3. StringBuilder (или StringBuffer)рекомендуется для множественных операций, так как избегает создания промежуточных строк.

    StringBuilder sb = new StringBuilder();
    sb.append(hello).append(" ").append(world);
    String result = sb.toString();

Почему StringBuilder лучше в циклах? Использование + внутри цикла приводит к созданию множества временных объектов String, что снижает производительность. StringBuilder работает с изменяемым внутренним буфером.

// Плохо (медленно):
String result = "";
for (int i = 0; i < 100; i++) {
    result += i; // Создается новый объект String на каждой итерации
}

// Хорошо (эффективно):
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
    sb.append(i);
}
String result = sb.toString();

Ответ 18+ 🔞

О, смотри-ка, народ опять пытается строки соединять, как будто это хуйня какая-то простая! А потом удивляются, почему программа тормозит, как черепаха в патруле. Давайте разберём эту пизду, но по-человечьи.

Ну, в общем, конкатенация — это когда ты из нескольких кусков склеиваешь одну здоровенную строку. В Джаве есть несколько способов это сделать, и они все как будто одинаковые, но на самом деле — хуй там, один из них просто пиздец какой опасный в определённых местах.

Как это обычно делают:

  1. Знакомый всем плюсик +. Ну, типа, просто и понятно. Для разовой операции — вообще огонь.

    String hello = "Hello";
    String world = "World";
    String result = hello + " " + world; // Получится "Hello World"

    Всё сработает, никто не пострадает. Но это только если ты не в цикле, ёпта!

  2. Метод String.concat(). Ну, типа, более официальный такой способ. По сути, та же самая хуйня, что и плюсик, только в профиль.

    String result = hello.concat(" ").concat(world);
  3. А вот и наш спаситель — StringBuilder (или его старый братан StringBuffer для многопоточки). Вот это, блядь, инструмент для взрослых дядек! Если тебе нужно клеить строки много-много раз подряд, ты берёшь именно его. Он не создаёт кучу мусора, а работает с одним буфером.

    StringBuilder sb = new StringBuilder();
    sb.append(hello).append(" ").append(world);
    String result = sb.toString();

А теперь главный вопрос: почему все орут про StringBuilder в циклах?

Представь себе такую картину. Ты в цикле 1000 раз делаешь result += i;. Кажется, что всё норм. А на самом деле, на КАЖДОМ шаге создаётся новый объект String, старый отправляется на свалку, и так по кругу. Это пиздец какой неэффективный способ, ядрёна вошь! Производительность летит в тартарары.

// Делать так — это как ебашить гвозди микроскопом. Работает, но идиотизм пиздецкий:
String result = "";
for (int i = 0; i < 100; i++) {
    result += i; // На каждом витке цикла — новый стринг, новый мусор!
}

// А делать надо вот так, по-умному:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
    sb.append(i); // Всё летит в один буфер, никакого лишнего мусора!
}
String result = sb.toString();

Вот и вся магия. Для разового склеивания — хоть плюсом, хоть конкатом. А если в цикле или много операций подряд — только StringBuilder, иначе сам себе злой буратино.