La pregunta "¿Cuál de estas es una clase inmutable en Java?" tiene como respuesta correcta java.lang.String
. Para entender esto, es importante tener claro qué es una clase inmutable y cuál es su papel en la programación en Java.
Una clase inmutable en Java es aquella cuyos objetos, una vez creados, no pueden ser modificados. Esto significa que todas las propiedades o campos de la clase son finales y no pueden ser cambiados una vez que el objeto es creado.
En este contexto, consideramos la clase java.lang.String
en Java. Esta clase es inmutable, lo que significa que una vez que se genera una instancia de cadena (string), esta no puede ser alterada o modificada.
Supongamos que tienes un objeto de cadena como este:
String saludo = "Hola, Mundo!";
En este caso, si deseas cambiar o modificar este string (por ejemplo, para que diga "¡Hola, Universo!"), en realidad no estás modificando el string original, sino que estás creando un nuevo string.
saludo = "¡Hola, Universo!";
En este caso, lo que sucede detrás de las escenas es que se crea un nuevo objeto de string con el valor "¡Hola, Universo!", y la referencia saludo
ahora apunta a este nuevo objeto. El string original "Hola, Mundo!" no se ve afectado.
La inmutabilidad de la clase String tiene varias ventajas. Por un lado, los strings inmutables son seguros para usar en un contexto multihilo, ya que no pueden ser modificados una vez creados, eliminando así la posibilidad de problemas de sincronización. Adicionalmente, los objetos String son hashable y pueden ser usados como elementos clave en un HashMap, por ejemplo.
Por otro lado, la inmutabilidad también puede tener sus desventajas. Si se necesita realizar una gran cantidad de modificaciones en un string (por ejemplo, en un bucle), esto podría llevar a la creación de muchos objetos de string en memoria, lo que podría resultar ineficiente.
Para este tipo de situaciones, Java ofrece alternativas como StringBuilder
y StringBuffer
, que permiten manipular cadenas de forma más eficiente. Sin embargo, a diferencia de java.lang.String
, estas clases son mutables, por lo que deben ser utilizadas con cuidado especialmente en entornos multihilo.