The intern() method
String interning is a technique used to store a String in a String pool. The intern()
method is essential for achieving this. According to Javadoc, the intern()
method works as follows:
/**
* Returns a canonical representation for the string object.
*
* A pool of strings, initially empty, is maintained privately by the
* class {@code String}.
*
* When the intern method is invoked, if the pool already contains a
* string equal to this {@code String} object as determined by
* the {@link #equals(Object)} method, then the string from the pool is
* returned. Otherwise, this {@code String} object is added to the
* pool and a reference to this {@code String} object is returned.
*
* It follows that for any two strings {@code s} and {@code t},
* {@code s.intern() == t.intern()} is {@code true}
* if and only if {@code s.equals(t)} is {@code true}.
*
* All literal strings and string-valued constant expressions are
* interned. String literals are defined in section 3.10.5 of the
* The Java™ Language Specification.
*
* @returns a string that has the same contents as this string, but is
* guaranteed to be from a pool of unique strings.
* @jls 3.10.5 String Literals
*/ public native String intern();
The intern()
method specifically stores Strings in a shared pool. It checks if the String already exists in the pool, and if not, it creates a new reference to the String in the pool. Internally, String pooling operates on the Flyweight pattern.
When using the new
keyword to create two Strings, observe the behavior: