Если вам нужна историческая причина, String неизменны в Java, то есть вы не можете изменить данную строку, если не создаете другую строку.
Хотя это и неплохо "per se", в начальных версиях Java отсутствовали такие классы, как StringBuilder. Вместо этого сама String содержала (и все еще содержит) множество методов для «изменения» String, но поскольку String является неизменяемым, каждый из этих методов фактически создает и возвращает объект NEW String.
Это вызвало простые выражения, такие как:
String s = "a" + anotherString.substr(10,5).trim().toLowerCase();
На самом деле создать в оперативной памяти что-то вроде 5 строк, 4 из которых абсолютно бесполезны, с очевидными проблемами с производительностью (несмотря на то, что была проведена некоторая оптимизация относительно базовых массивов char []).
Чтобы решить эту проблему, Sun представила StringBuilder и другие классы, которые НЕ являются неизменяемыми. Эти классы свободно модифицируют один массив char [], поэтому при вызове методов не требуется создавать много промежуточных экземпляров String.
Они добавили «реверс» в последнее время, поэтому они добавили его в StringBuilder вместо String, потому что теперь это предпочтительный способ манипулирования строками.