string - por - ¿Cuál es la ventaja de que una cadena sea inmutable?
stringbuilder en java (7)
Considera la alternativa. Java no tiene calificador const. Si los objetos String fueran mutables, cualquier método al que le pase una referencia a una cadena podría tener el efecto secundario de modificar la cadena. Las cadenas inmutables eliminan la necesidad de copias defensivas y reducen el riesgo de error del programa.
Una vez que estudié sobre la ventaja de una cuerda que es inmutable debido a algo para mejorar el rendimiento en la memoria.
¿Alguien puede explicarme esto? No puedo encontrarlo en internet
Las cadenas inmutables son baratas de copiar, ya que no es necesario copiar todos los datos, solo copie una referencia o un puntero a los datos.
Las clases inmutables de cualquier tipo son más fáciles de trabajar en múltiples hilos, la única sincronización necesaria es la destrucción.
La inmutabilidad (para cadenas u otros tipos) puede tener numerosas ventajas:
- Hace que sea más fácil razonar sobre el código, ya que puede hacer suposiciones sobre variables y argumentos que de otro modo no podría hacer.
- Simplifica la programación multiproceso ya que la lectura de un tipo que no se puede modificar es siempre seguro de realizar al mismo tiempo.
- Permite una reducción del uso de la memoria al permitir que se combinen valores idénticos y que se los haga referencia desde múltiples ubicaciones. Tanto Java como C # realizan una secuencia de cadenas para reducir el costo de memoria de cadenas literales incrustadas en el código.
- Simplifica el diseño y la implementación de ciertos algoritmos (como los que emplean partición de retroceso o partición de espacio de valor) porque el estado calculado previamente puede reutilizarse más adelante.
- La inmutabilidad es un principio fundamental en muchos lenguajes de programación funcionales: permite que el código se vea como una serie de transformaciones de una representación a otra, en lugar de una secuencia de mutaciones.
Las cadenas inmutables también ayudan a evitar la tentación de usar cadenas como búferes. Muchos defectos en los programas C / C ++ se relacionan con problemas de desbordamiento de búfer que resultan del uso de matrices de caracteres desnudos para componer o modificar valores de cadena. El tratamiento de cadenas como tipos mutables fomenta el uso de tipos más adecuados para la manipulación del búfer (vea StringBuilder
en .NET o Java).
a) Imagine la instalación de StringPool sin hacer inmutable la cadena, no es posible porque en el grupo de cadenas un objeto de cadena / literal, por ejemplo, "Prueba", ha sido referenciado por muchas variables de referencia, por lo que si cualquiera de ellas cambia el valor, otras serán automáticamente se ve afectado es decir, digamos Cadena A = "Prueba" y Cadena B = "Prueba" Ahora Cadena B llamada "Prueba" .to Arriba Causa () que cambia el mismo objeto en "PRUEBA", por lo que A también será "PRUEBA" que no es deseable.
b) Otra razón por la cual Why String es inmutable en Java es permitir que Cadena guarde en caché su código hash, siendo inmutable. Cadena en Java almacena en caché su código hash y no calcula cada vez que llamamos el método hashcode de String, lo que lo hace muy rápido como hashmap key .
Piensa en varias cadenas sentadas en un grupo común. Las variables de cadena apuntan a ubicaciones en el grupo. Si copia una variable de cadena, tanto el original como la copia comparten los mismos caracteres. Esta eficacia de compartir compensa la ineficacia de la edición de cadenas mediante la extracción de subcadenas y la concatenación.
Tal vez, mi respuesta está desactualizada, pero probablemente alguien encuentre aquí una nueva información.
Por qué Java String es inmutable y por qué es bueno:
- puedes compartir una cadena entre hilos y asegurarte de que ninguno de ellos cambie la cadena y confunda otro hilo
- no necesitas un candado Varios hilos pueden trabajar con cadenas inmutables sin conflictos
- si acabas de recibir una cadena, puedes estar seguro de que nadie cambiará su valor después de esa
- puede tener muchos duplicados de cadenas; se los señalará a una sola instancia, a una sola copia. Esto ahorra memoria de la computadora (RAM)
- puede hacer una subcadena sin copiar, - creando un puntero al elemento de una cadena existente. Esta es la razón por la cual la implementación de la operación de subcadena Java es tan rápida
- Las cadenas inmutables (objetos) son mucho más adecuadas para usarlas como clave en hash-tables
Fundamentalmente, si un objeto o método desea pasar información a otro, existen algunas maneras en que puede hacerlo:
Puede dar una referencia a un objeto mutable que contiene la información y que el destinatario promete no modificar nunca.
Puede dar una referencia a un objeto que contiene los datos, pero cuyo contenido no le importa.
Puede almacenar la información en un objeto mutable del que el receptor de datos previsto conoce (generalmente uno proporcionado por ese destinatario de datos).
Puede devolver una referencia a un objeto inmutable que contiene la información.
De estos métodos, el # 4 es de lejos el más fácil. En muchos casos, es más fácil trabajar con objetos mutables que con objetos inmutables, pero no hay una manera fácil de compartir con el código "no confiable" la información que está en un objeto mutable sin tener que copiar primero la información a otra cosa. Por el contrario, la información contenida en un objeto inmutable del que se tiene una referencia se puede compartir fácilmente simplemente compartiendo una copia de esa referencia.