Je ne suis pas certain à propos de JavaScript, mais en Java, les chaînes de prendre une étape supplémentaire pour l'immuabilité, avec la "Constante de Chaîne de la Piscine". Les chaînes peuvent être construits avec des littéraux de chaîne ("foo"
) ou avec un String
le constructeur de la classe. Les chaînes construites avec des littéraux de chaîne sont une partie de la Chaîne Constante de la Piscine, et de la même chaîne de caractères littérale sera toujours la même adresse mémoire de la piscine.
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
Ci-dessus, les deux lit1
et lit2
sont construits à l'aide de la même chaîne de caractères littérale, de sorte qu'ils pointent vers le même adresse en mémoire; lit1 == lit2
résultats en true
, parce qu'ils sont exactement le même objet.
Toutefois, cons
est construit en utilisant le constructeur de la classe. Bien que le paramètre est égal à la constante de chaîne, le constructeur alloue de la mémoire pour cons
, signifiant cons
n'est pas le même objet que l' lit1
et lit2
, malgré contenant les mêmes données.
Bien sûr, depuis les trois chaînes contiennent toutes le même caractère de données, à l'aide de l' equals
méthode renvoie true.
(Les deux types de chaîne de construction sont immuables, bien sûr)