Самое важное отличие String от StringBuilder/StringBuffer - это то, что String immutable, в то время как StringBuilder/StringBuffer mutable.
Что же это значит? А значит это то, что значение String не может изменяться. Но вы ведь много раз так делали, скажите вы. Всё дело в том, что при изменении значения String в действительности создается новый объект с новым значением. И, конечно же, создание новых объектов при каждом изменении - операция неэффективная.