En términos de Java, los símbolos son cadenas internas. Esto significa, por ejemplo, que la comparación de igualdad de referencia ( eq
en Scala y ==
en Java) da el mismo resultado que la comparación de igualdad normal ( ==
en Scala y equals
en Java): 'abcd eq 'abcd
devolverá verdadero, aunque "abcd" eq "abcd"
podría no, dependiendo de los caprichos de JVM (bueno, debería para literales, pero no para cadenas creadas dinámicamente en general).
Otros lenguajes que usan símbolos son Lisp (que usa 'abcd
como Scala), Ruby ( :abcd
), Erlang y Prolog ( abcd
; se llaman átomos en lugar de símbolos).
Usaría un símbolo cuando no me importa la estructura de una cadena y lo usaría simplemente como un nombre para algo. Por ejemplo, si tengo una tabla de base de datos que representa CD, que incluye una columna llamada "precio", no me importa que el segundo carácter de "precio" sea "r", o sobre la concatenación de nombres de columna; por lo que una biblioteca de base de datos en Scala podría usar símbolos para los nombres de tablas y columnas.