¿Por qué String es inmutable en Java? es una de las preguntas más populares en entrevistas. La cadena es una de las clases más utilizadas en cualquier lenguaje de programación. Sabemos que String es inmutable y final en Java. El tiempo de ejecución de Java mantiene un pool de cadenas que lo convierte en una clase especial.
¿Por qué String es inmutable en Java?
Veamos algunos de los beneficios de la inmutabilidad de String, que ayudarán a comprender por qué String es inmutable en Java.
- El pool de cadenas es posible solo porque String es inmutable en Java. De esta manera, Java Runtime ahorra mucho espacio en el montón (heap space) porque diferentes variables de cadena pueden hacer referencia a la misma variable de cadena en el pool. Si String no fuera inmutable, la internación de cadenas no sería posible porque si alguna variable cambiara de valor, se reflejaría en las demás variables también.
- Si String no es inmutable, causaría una grave amenaza de seguridad para la aplicación. Por ejemplo, el nombre de usuario y la contraseña de la base de datos se pasan como String para obtener conexión a la base de datos y en la programación de socket se pasan detalles de host y puerto como String. Dado que String es inmutable, su valor no puede cambiarse; de lo contrario, cualquier hacker podría cambiar el valor referenciado para causar problemas de seguridad en la aplicación.
- Dado que String es inmutable, es seguro para multithreading. Una única instancia de String puede ser compartida entre diferentes hilos. Esto evita el uso de sincronización para la seguridad de los hilos. Los Strings son implícitamente seguros para hilos.
- Los Strings se utilizan en java classloader y la inmutabilidad proporciona seguridad de que la clase correcta está siendo cargada por el Classloader. Por ejemplo, piensa en una instancia donde estás intentando cargar la clase
java.sql.Connection
pero el valor referenciado se cambia a la clasemyhacked.Connection
que puede hacer cosas no deseadas en tu base de datos. - Dado que String es inmutable, su hashcode se almacena en caché en el momento de la creación y no necesita ser calculado nuevamente. Esto lo convierte en un excelente candidato para la clave en un Mapa y su procesamiento es más rápido que otros objetos clave de HashMap. Por eso String es el más ampliamente usado como claves de HashMap.
Arriba se encuentran algunas de las razones que puedo pensar que demuestran los beneficios de la inmutabilidad de las cadenas. Es una excelente característica de la clase de cadenas de Java (Java String class) y la hace especial. Lee esta publicación para saber cómo escribir tu propia clase inmutable.
Puedes consultar más ejemplos de cadenas en Java en nuestro Repositorio de GitHub.
Source:
https://www.digitalocean.com/community/tutorials/string-immutable-final-java