+

Оператор + склеивает строки и другие значения в новый объект String, не изменяя исходные — результат нужно явно сохранить в переменную.

Полная статья

Описание

Оператор + позволяет склеить несколько строк или строку с числом, символом и другими совместимыми значениями — и получить на выходе новый объект String. Исходные переменные при этом остаются нетронутыми: результат нужно явно сохранить в новую переменную или присвоить обратно одной из исходных.

Синтаксис

myString3 = myString1 + myString2

Параметры

  • myString1: первый объект String — левый операнд.
  • myString2: второй объект String или любое значение, которое Arduino умеет неявно преобразовать в строку (число, символ и т. п.).
  • myString3: переменная, в которую записывается результат конкатенации.

Возвращает

Новый объект String, содержащий текст обоих операндов, соединённый без разделителя.

Где применяется

  • Формирование строки для отправки через Serial.println(): объединение метки и числового значения датчика.
  • Сборка команд или ответов для связи по UART, Bluetooth или Wi-Fi.
  • Подготовка строк для вывода на дисплей: объединение нескольких фрагментов перед вызовом lcd.print().
  • Построение URL-адресов или HTTP-заголовков в сетевых скетчах.

Практические замечания

  • Каждый вызов оператора + создаёт временный объект String в куче. Если конкатенация происходит часто и строки разного размера, SRAM может фрагментироваться, что со временем приводит к непредсказуемым сбоям.
  • Если строка собирается по частям в цикле, заранее выделите память с помощью reserve() — это снизит количество перераспределений и уменьшит фрагментацию.
  • Помните: исходные объекты myString1 и myString2 не изменяются. Если нужно обновить одну из них, используйте присваивание вида myString1 = myString1 + myString2 или сокращённый оператор +=.
  • На платах с малым объёмом SRAM (например, Arduino Uno с 2 КБ) злоупотребление конкатенацией — одна из самых частых причин зависания скетча без явной ошибки компилятора.
  • Если результат конкатенации не сохранён ни в одну переменную, временный объект сразу уничтожается — убедитесь, что myString3 действительно получает значение.