"¡Hola, amigo!"
"¡Hola, Bilaabo!"
"Hoy Bilaabo te hablará de objetos mutables e inmutables .
"Los objetos que puede cambiar después de crearlos se denominan mutables ".
"Los objetos que no se pueden cambiar después de su creación se denominan inmutables ".
"¿Qué determina si puedo cambiar un objeto?"
"El autor de una nueva clase puede hacer que los objetos de esa clase sean inmutables. Por ejemplo, si hace que todos los establecedores sean privados, entonces un objeto solo tendrá un constructor y captadores; eso significa que será imposible cambiarlo después de que se haya creado. ."
"¿Y cuál sería el punto de eso?"
"Los objetos inmutables tienen muchas propiedades útiles, pero destacaré dos que son comunes a casi todos los objetos inmutables:"
1) Los objetos inmutables son mucho más fáciles de implementar que los objetos mutables.
2) Los objetos inmutables se pueden usar libremente en múltiples subprocesos simultáneamente.
"Cuando un desarrollador decide escribir una clase inmutable, generalmente crea una versión mutable e inmutable de la clase".
"¿Pero cuál es el punto de escribir dos clases en lugar de una?"
"A veces vale la pena cuando una versión inmutable de un objeto será mucho más simple o más rápida que una mutable. Entonces, hacen dos versiones. Es algo así como ArrayList y LinkedList: ambas son listas, pero una está optimizada para propósitos específicos, y el segundo para los demás".
"Eso ya tiene más sentido".
"También hay clases puramente inmutables, que no tienen una versión mutable".
"Pero, ¿y si necesito cambiar algo en uno de esos objetos? ¿Qué puedes hacer realmente con un objeto inmutable?"
"Por lo general, las clases inmutables contienen varios métodos que actúan como si cambiaran el objeto, pero estos métodos simplemente crean un nuevo objeto y lo devuelven, en lugar de cambiar el objeto en sí".
"Aquí hay unos ejemplos:"
codigo Java | Descripción |
---|---|
|
Como resultado, s contiene la cadena «londres» y s2 contiene «LONDRES» |
|
Esto es lo que realmente sucede: Integer i = new Integer(1); Entero j = i; j = nuevo entero(i.getInt()+1); |
"La clase String es una clase inmutable. Todos los objetos String son inmutables, pero eso no nos impide trabajar con ellos. Por ejemplo, el método toUpperCase () de la clase String convierte una cadena a mayúsculas (es decir, reemplaza todas las letras minúsculas con letras mayúsculas). Sin embargo, este método no cambia la Cadena en sí, sino que devuelve una nueva Cadena. Esta nueva Cadena es idéntica a la primera, excepto que todos los caracteres están en mayúsculas (letras mayúsculas)".
"La clase Integer también es una clase inmutable. Todos los objetos Integer son inmutables. Cada vez que cambiamos un objeto Integer, en realidad estamos creando un nuevo objeto".
"¡Qué interesante! ¡Hurra, Bilaabo!"
"¡Hurra por mí! ¡Hurra por Bilaabo!"
GO TO FULL VERSION