el beneficiarían de hacer cadena como inmutable era para la función de seguridad. Lea a continuación
¿Por qué la cadena se ha hecho inmutable en Java?
Aunque, el rendimiento también es un motivo (suponiendo que ya conoce el String pool interno para asegurarse de que el mismo objeto String se usa más de una vez sin tener que crear/volver a reclamarlo muchas veces), pero la razón principal por la cual se ha hecho inmutable String en Java es 'Seguridad'. ¿Sorprendido? Vamos a entender por qué.
Supongamos que debe abrir un archivo seguro que requiera que los usuarios se autentiquen a sí mismos. Digamos que hay dos usuarios llamados 'usuario1' y 'usuario2' y tienen sus propios archivos de contraseñas 'contraseña1' y 'contraseña2', respectivamente. Obviamente, 'usuario2' no debería tener acceso al archivo 'contraseña1'.
Como sabemos, los nombres de los archivos en Java se especifican mediante cadenas. Incluso si crea un objeto 'Archivo', pasa el nombre del archivo como una Cadena solamente y esa Cadena se mantiene dentro del objeto Archivo como uno de sus miembros.
Had String sido mutable, 'user1' podría haber iniciado sesión usando sus credenciales y de alguna manera podría haber logrado cambiar el nombre de su contraseña (un objeto String) de 'contraseña1' a 'contraseña2' antes de que JVM realmente coloque la llamada al sistema nativo del sistema operativo para abrir el archivo. Esto hubiera permitido que 'usuario1' abriera el archivo de contraseñas del usuario2. Es comprensible que hubiera resultado en un gran defecto de seguridad en Java. Entiendo que hay muchas cosas que 'podría haber' aquí, pero ciertamente estarías de acuerdo en que habría abierto una puerta para permitir a los desarrolladores desordenar la seguridad de muchos recursos, ya sea intencionalmente o no intencionalmente.
Con las cadenas inmutables, JVM puede estar seguro de que el miembro de la instancia del nombre de archivo del objeto File correspondiente seguirá apuntando al mismo objeto String "filename" sin modificar. El miembro de la instancia 'filename' que es 'final' en la clase File no se puede modificar para apuntar a ningún otro objeto String que especifique ningún otro archivo distinto al deseado (es decir, el que se usó para crear el objeto File).
Piensa qué harás si quieres crear una clase inmutable por ti mismo. – Azodious
Bueno, mi pregunta es: hay tantas otras clases inmutables en Java, por qué los diseñadores de Java decidieron hacer String Pool. ¿Es una función para ayudar al rendimiento o fue la necesidad de Java Design? –