En términos de Java, los símbolos son cadenas internas. Esto significa, por ejemplo, que la comparación de igualdad de referencia ( eqen Scala y ==en Java) da el mismo resultado que la comparación de igualdad normal ( ==en Scala y equalsen Java): 'abcd eq 'abcddevolverá 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 'abcdcomo 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.