En termes Java, les symboles sont des chaînes internes. Cela signifie, par exemple, que la comparaison d'égalité de référence ( 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 true, alors que "abcd" eq "abcd"
ce ne sera peut-être pas le cas, selon les caprices de JVM (enfin, il devrait pour les littéraux, mais pas pour les chaînes créées dynamiquement en général).
D'autres langages qui utilisent des symboles sont Lisp (qui utilise 'abcd
comme Scala), Ruby ( :abcd
), Erlang et Prolog ( abcd
; ils sont appelés atomes au lieu de symboles).
J'utiliserais un symbole quand je ne me soucierais pas de la structure d'une chaîne et l'utiliser uniquement comme un nom pour quelque chose. Par exemple, si j'ai une table de base de données représentant des CD, qui comprend une colonne nommée «price», je me fiche que le deuxième caractère de «price» soit «r» ou de concaténation des noms de colonnes; donc une bibliothèque de base de données dans Scala pourrait raisonnablement utiliser des symboles pour les noms de table et de colonne.