+=
Оператор += дописывает данные в конец объекта String, помогая собирать текст из нескольких частей без отдельного вызова concat().
Полная статья
Описание
Оператор += — это сокращённая форма записи для добавления данных в конец строки. Он изменяет переменную String непосредственно, не создавая промежуточного объекта. Это удобно, когда нужно последовательно накапливать текст: добавлять показания датчиков, собирать строку ответа для Serial или формировать команду для внешнего устройства.
Синтаксис
myString += data
Параметры
myString: объектString, к которому будут дописаны данные. Именно эта переменная изменяется после выполнения оператора.data: то, что нужно добавить — другая строка, символ, целое число, число с плавающей точкой или любое значение, котороеStringумеет принять.
Возвращает
Оператор ничего не возвращает: строка изменяется на месте, без создания копии.
Это принципиально отличает += от оператора +: тот возвращает новый объект String и не трогает исходный, а += сразу модифицирует переменную, к которой применяется.
Где применяется
- Сборка строки для вывода в Serial. Удобно добавлять метки и значения по одному: сначала название параметра, потом его значение, потом единицу измерения.
- Формирование текстовых команд. Если протокол устройства требует строку из нескольких частей, их проще накапливать через
+=, чем конкатенировать всё сразу. - Буферизация входящих символов. При чтении данных из Serial побайтово каждый символ добавляется к строке-буферу до прихода символа-терминатора.
- Построение JSON или CSV-строк. Поля и разделители добавляются поочерёдно в одну переменную.
Практические замечания
- Каждый вызов
+=может вызывать перераспределение памяти в куче. Если строка будет длинной, заранее выделите под неё память с помощьюreserve()— это снизит фрагментацию и ускорит работу. - Если исходную строку нужно сохранить без изменений, а результат получить в отдельной переменной, используйте
+вместо+=. - Добавление числа (например,
intилиfloat) автоматически преобразует его в текстовое представление — так же, как это делает конструкторString(). - На платах с малым объёмом RAM (Arduino Uno, Nano) частое использование
Stringи+=может привести к нехватке памяти. В критичных по ресурсам проектах рассмотрите работу с массивамиcharи функциямиstrcat()/snprintf(). - Если после серии операций
+=строка ведёт себя неожиданно или обрезается, проверьте свободную память черезfreeMemory()(библиотека MemoryFree) — вероятно, куча переполнена.