String
хитрый тип, до недавнего времени его нельзя была задать в роли константы, т.к. он действительно ссылочный тип. Ещё по-умолчанию он интернированный, т.е все одинаковые тексты ссылаются на одним объект. Текст нельзя поменять, можно только создать новый объект с новым текстом.
У вас же передаётся ссылка на объект "str", а затем в методе создаётся новый объект текста и ссылка сохраняется в переменную.
Отсюда следует, что если вы собираете условный json постоянными склейками текстов, то вы генерируете кучу новых объектов - не эффективно расходуя память. Для это лучше использовать StringBuilder, который весь текст складывает в один буфер с заранее большей длинной.