З точки зору Java, символи - це інтерновані рядки. Це означає, наприклад, що порівняння порівняльної рівності ( eqу Scala та ==Java) дає такий самий результат, як і порівняння звичайних рівностей ( ==у Scala та equalsJava): 'abcd eq 'abcdповернеться true, тоді як"abcd" eq "abcd" не може, залежно від примх JVM (ну, це повинно для літералів, але не для рядків, створених динамічно в цілому).
Інші мови, які використовують символи, - це Lisp (який використовує, 'abcdяк Scala), Ruby ( :abcd), Erlang і Prolog ( abcd; вони називаються атомами замість символів).
Я би використовував символ, коли мені не байдуже структура струни і використовую її як назву чогось. Наприклад, якщо у мене є таблиця бази даних, що представляє компакт-диски, яка включає стовпчик з назвою "ціна", мені не байдуже, що другий символ у "ціні" - "r", або про об'єднання назв стовпців; тому бібліотека баз даних у Scala могла б розумно використовувати символи для імен таблиць та стовпців.