Фактически запущенная программа возвращает
хорошо 0 1 2 3
(на самом деле выписал и попытался запустить его в Java ... вы должны попробовать).
Проходя через программу, мы можем думать об этом так:
В функции nameTest sName является локальной строковой переменной.
Как сказано в объяснении, строки являются неизменяемыми, поэтому объединение строк с «идеей» создаст новый экземпляр строки - «хорошая идея» - и назначит его локальной переменной sName. Переменная класса sName (я думаю, ее не следует называть глобальной) в результате останется «хорошей».
Затем он запускает функцию потока, используя start (), которая вызывает run ().
В функции run () мы делаем конкатенацию еще раз, но на этот раз мы присваиваем переменной класса sName.
Поэтому, когда функция run () возвращается, переменная класса sName изменяется, и распечатка будет отражать это.