[5] Lisp, Scheme, Julia, Ruby and Smalltalk are among the languages with a symbol type that are basically interned strings.
Symbols often have additional properties that strings do not such as storage for associated values, or namespacing.
With interned strings, a simple object identity test suffices after the original intern operation; this is typically implemented as a pointer equality test, normally just a single machine instruction with no memory reference at all.
For example, XML parsers may intern names of tags and attributes to save memory.
[8] Contention can also be reduced by partitioning the string space into multiple pools, which can be synchronized independently of one another.
For applications where the number of interned strings is small or fixed, or which are short-lived, the loss of system resources may be tolerable.