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