No estoy seguro acerca de JavaScript, pero en Java, las cadenas dan un paso adicional a la inmutabilidad, con el "Conjunto constante de cadenas". Las cadenas se pueden construir con literales de cadena ("foo"
) o con un constructor de clase String
. Las cadenas construidas con literales de cadena forman parte del conjunto constante de cadenas, y el mismo literal de cadena siempre será la misma dirección de memoria del grupo.
Ejemplo:
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
En lo anterior, tanto lit1
y lit2
se construyen utilizando la misma cadena literal, por lo que están apuntando a la misma dirección de memoria; lit1 == lit2
resultados en true
, porque son exactamente el mismo objeto.
Sin embargo, cons
se construye utilizando el constructor de clase. Aunque el parámetro es la misma constante de cadena, el constructor asigna memoria nueva para cons
, lo que significa que cons
no es el mismo objeto que lit1
y lit2
, a pesar de contener los mismos datos.
Por supuesto, dado que las tres cadenas contienen todos los mismos datos de caracteres, utilizando el método equals
se devolverá verdadero.
(Ambos tipos de construcción String son inmutables, por supuesto)
La misma cadena, si se modifica y asigna, actualizará la cadena var str = 'foo'; str = str.substr (1)); // oo alert (str); // oo –
¿Qué pasa con el siguiente código. El valor de cadena se cambia ahora. var name = "Santosh"; console.log (name.substr (0,2)); var name = "kumar" console.log (nombre); Cómo es aún inmutable – Santosh