O método intern()

Para armazenar um String em um String piscina, usamos uma técnica chamada Estagiário de cordas. Aqui está o que o Javadoc nos diz sobre o intern() método:


    /**
     * 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
     * 
     * 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();

O intern() método é usado para armazenar Stringestá em um String piscina. Primeiro, ele verifica se o String que você criou já existe no pool. Se não, ele cria um novo String na piscina. Nos bastidores, a lógica de String o pooling é baseado no padrão Flyweight.

Agora, observe o que acontece quando usamos o new palavra-chave para forçar a criação de dois Stringe: