Em termos de Java, os símbolos são strings internas. Isso significa, por exemplo, que a comparação de igualdade de referência ( eq
em Scala e ==
em Java) dá o mesmo resultado que a comparação de igualdade normal ( ==
em Scala e equals
em Java): 'abcd eq 'abcd
retornará verdadeiro, enquanto "abcd" eq "abcd"
pode não, dependendo dos caprichos da JVM (bem, deveria para literais, mas não para strings criadas dinamicamente em geral).
Outras linguagens que usam símbolos são Lisp (que usa 'abcd
como Scala), Ruby ( :abcd
), Erlang e Prolog ( abcd
; eles são chamados de átomos em vez de símbolos).
Eu usaria um símbolo quando não me importasse com a estrutura de uma string e o usaria puramente como um nome para algo. Por exemplo, se eu tiver uma tabela de banco de dados representando CDs, que inclui uma coluna chamada "preço", não me importo se o segundo caractere em "preço" é "r" ou sobre a concatenação dos nomes das colunas; portanto, uma biblioteca de banco de dados em Scala poderia razoavelmente usar símbolos para nomes de tabelas e colunas.