Je ne suis pas certain de JavaScript, mais en Java, les chaînes franchissent une étape supplémentaire vers l'immuabilité, avec le "String Constant Pool". Les chaînes peuvent être construites avec des littéraux de chaîne ( "foo") ou avec un Stringconstructeur de classe. Les chaînes construites avec des littéraux de chaîne font partie du pool de constantes de chaîne, et le même littéral de chaîne sera toujours la même adresse mémoire du pool.
Exemple:
String lit1 = "foo";
String lit2 = "foo";
String cons = new String("foo");
System.out.println(lit1 == lit2); // true
System.out.println(lit1 == cons); // false
System.out.println(lit1.equals(cons)); // true
Dans ce qui précède, les deux lit1et lit2sont construits en utilisant le même littéral de chaîne, ils pointent donc vers la même adresse mémoire; lit1 == lit2résultats true, car ils sont exactement le même objet.
Cependant, consest construit à l'aide du constructeur de classe. Bien que le paramètre soit la même constante de chaîne, le constructeur alloue une nouvelle mémoire pour cons, ce qui signifie consn'est pas le même objet que lit1et lit2, bien qu'il contienne les mêmes données.
Bien sûr, étant donné que les trois chaînes contiennent toutes les mêmes données de caractères, l'utilisation de la equalsméthode retournera true.
(Les deux types de construction de chaînes sont immuables, bien sûr)