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 String
constructeur 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 lit1
et lit2
sont construits en utilisant le même littéral de chaîne, ils pointent donc vers la même adresse mémoire; lit1 == lit2
résultats true
, car ils sont exactement le même objet.
Cependant, cons
est 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 cons
n'est pas le même objet que lit1
et 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 equals
méthode retournera true.
(Les deux types de construction de chaînes sont immuables, bien sûr)