En termes de Java, les symboles sont des chaînes de caractères internées. Cela signifie, par exemple, que la comparaison de l'égalité des références ( eq
en Scala et ==
en Java) donne le même résultat que la comparaison d'égalité normale ( ==
en Scala et equals
en Java) : 'abcd eq 'abcd
retournera vrai, tandis que "abcd" eq "abcd"
pourrait ne pas l'être, selon les caprices de la JVM (en fait, elle devrait l'être pour les littéraux, mais pas pour les chaînes de caractères créées dynamiquement en général).
Les autres langages qui utilisent des symboles sont Lisp (qui utilise 'abcd
comme Scala), Ruby ( :abcd
), Erlang et Prolog ( abcd
; on les appelle des atomes au lieu de symboles).
J'utiliserais un symbole lorsque je ne me soucie pas de la structure d'une chaîne de caractères et que je l'utilise uniquement pour nommer quelque chose. Par exemple, si j'ai une table de base de données représentant des CD, qui comprend une colonne nommée "prix", je ne me soucie pas que le deuxième caractère de "prix" soit "r", ni de la concaténation des noms de colonnes ; une bibliothèque de base de données en Scala pourrait donc raisonnablement utiliser des symboles pour les noms de tables et de colonnes.