W języku Java symbole są łańcuchami wewnętrznymi. Oznacza to na przykład, że porównanie równości odniesień ( eq
w Scali i ==
Javie) daje taki sam wynik jak normalne porównanie równości ( ==
w Scali i equals
Javie): 'abcd eq 'abcd
zwróci wartość true, ale "abcd" eq "abcd"
może nie, w zależności od kaprysów JVM (cóż, powinno dla literałów, ale nie dla łańcuchów tworzonych dynamicznie).
Inne języki, które używają symboli to Lisp (który używa 'abcd
jak Scala), Ruby ( :abcd
), Erlang i Prolog ( abcd
; nazywane są atomami zamiast symboli).
Użyłbym symbolu, gdy nie obchodzi mnie struktura łańcucha i używam go wyłącznie jako nazwy czegoś. Na przykład, jeśli mam tabelę bazy danych reprezentującą płyty CD, która zawiera kolumnę o nazwie „cena”, nie obchodzi mnie, że drugi znak w polu „cena” to „r”, czy też konkatenacja nazw kolumn; więc biblioteka bazy danych w Scali mogłaby rozsądnie używać symboli dla nazw tabel i kolumn.