Все методы манипуляций со String возвращают новый объект String, потому когда вы пишите m.toUpperCase() вы возвращаете новый объект String, где все буквы в большом регистре, но вы никуда не сохраняете результат. Вот StringBuilder не возвращает новый объект, он реально изменяет значение внутри себя.