Saltar al contenido

Entendiendo la Inmutabilidad de las Cuerdas en Do#

Aunque no es imperativo, es absolutamente importante saber lo que pasa en la memoria mientras se escribe el código, ya sea con cadenas o estructuras de datos o algo más. Ayuda de varias maneras, ya sea arreglando errores de software o diagnosticando fugas de memoria o problemas de rendimiento. Encuentro que la mejor comparación es saber qué está pasando bajo el capó de tu vehículo. Aunque no es crítico saberlo, es útil conocer las partes bajo el capó de un vehículo y qué propósito tienen en caso de problemas en el vehículo.

Veamos más de cerca el ejemplo de la sección anterior. Crearemos una nueva cadena, la modificaremos y explicaremos lo que ocurre en la memoria durante todo esto.

Entendiendo la Inmutabilidad de las Cuerdas en Do#
Entendiendo la Inmutabilidad de las Cuerdas en Do#
123string str = "Hello World";Console.WriteLine(str);// Esto imprimirá "Hello World" a la consola.
[c#]

En el programa, estamos creando un objeto de cadena llamado str y le asignamos el valor «Hola Mundo». Sin embargo, en la memoria, el CLR está creando bloques de espacio para almacenar esta variable. Para simplificar, digamos que el CLR utiliza la ubicación de memoria 1000 para almacenar str . Como esto es un objeto, el CLR lo almacenará en el montón, no en la pila. Ahora, modifiquemos esta cadena.

123str += " editado";Consola.WriteLine(str);// Esto imprimirá "Hola Mundo editado" a la consola.
[c#]

Cuando ejecute este código, verá «Hola Mundo» editado. Como esta cadena es inmutable, el CLR vuelve a crear nuevos bloques de espacio en la memoria para almacenar esta variable. El CLR asignará una nueva ubicación de memoria, digamos la ubicación 1500 para esta nueva variable. Eventualmente, el recolector de basura se deshará de la cadena original almacenada en la ubicación 1000 y la borrará de la memoria.