Una vez que estudié sobre la ventaja de una cadena que es inmutable debido a algo para mejorar el rendimiento en la memoria.¿Cuál es la ventaja de que una cadena sea inmutable?
¿Alguien me puede explicar esto? No puedo encontrarlo en internet
Una vez que estudié sobre la ventaja de una cadena que es inmutable debido a algo para mejorar el rendimiento en la memoria.¿Cuál es la ventaja de que una cadena sea inmutable?
¿Alguien me puede explicar esto? No puedo encontrarlo en internet
Las cadenas inmutables son baratas de copiar, porque 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 varios subprocesos, la única sincronización necesaria es la destrucción.
Considere 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.
inmutabilidad (para cuerdas u otros tipos) puede tener numerosas ventajas:
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 los problemas de desbordamiento del 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 de búferes (consulte StringBuilder
en .NET o Java).
Pero si utiliza un paradigma [Copiar en la escritura] (http://en.wikipedia.org/wiki/Copy-on-write), tiene las ventajas de cadenas inmutables * y * copias privadas y en contexto modificación, si es necesario, por ejemplo para un análisis rápido 'StringBuilder' es solo una solución para ralentizar la concatenación de cadenas inmutables, y de poco beneficio con respecto al patrón COW asociado con un sistema eficiente de gestión de montones. COW puede permitir que tu acceso a la memoria intermedia sea seguro * y * rápido al mismo tiempo. –
Varios de esos argumentos parecen confundir los parámetros "const" (lo mismo que Java "final") con la inmutabilidad de los objetos referidos. –
@LBushkin, aunque hagas algunos buenos argumentos en tus viñetas, tu párrafo "Las cuerdas inmutables también ayudan a evitar ..." es engañoso. StringBuilder resuelve un problema completamente diferente que la anulación de búfer en C: solo se trata de optimización para la concatenación de cadenas, porque la concatenación de cadenas inmutables es lenta; es necesario crear dos objetos nuevos y copiar todos los caracteres para cada paso de concatenación. – Alexey
Piensa en varias cadenas que se sientan en un fondo común. Las variables de cadena apuntan a ubicaciones en el grupo. Si copia una variable de cadena, tanto original como copian 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.
a) Imagine la instalación de StringPool sin hacer que la cadena sea inmutable, no es posible en absoluto porque en el caso de un grupo de cadenas un objeto de cadena/literal, p. "Prueba" ha sido referenciada por muchas variables de referencia, por lo que si cualquiera de ellas cambia el valor, otras se verán afectadas automáticamente, digamos Cadena A = "Prueba" y Cadena B = "Prueba" Ahora Cadena B llamada "Prueba" .toUpperCase() que cambia el mismo objeto en "TEST", por lo que A también será "TEST", lo que no es deseable.
b) Otra razón por la cual Why String es inmutable en Java es permitir que String almacene en caché su código hash, siendo inmutable String en Java almacena en caché su código hash y no calcula cada vez que llamamos el método hashcode de String, lo cual hace que sea muy rápido clave hashmap.
Tal vez, mi respuesta es obsoleta, pero probablemente alguien encuentre aquí una nueva información.
Por qué String de Java es inmutable y por qué es bueno:
Fundamentalmente, si un objeto o método deseos para pasar información a otro , hay algunas formas en que puede hacerlo:
se puede dar una referencia a un objeto mutable que contiene la información, y que el receptor promete no volver a modificar.
Puede hacer referencia a un objeto que contiene los datos, pero cuyo contenido no le importa.
Puede almacenar la información en un objeto mutable que el destinatario de datos previsto conoce (generalmente uno proporcionado por ese destinatario de datos).
Puede devolver una referencia a un objeto inmutable que contenga la información.
De estos métodos, el # 4 es de lejos el más fácil. En muchos casos, los objetos mutables son más fáciles de trabajar que los inmutables, pero, no hay una forma 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.
posible duplicado de [¿Qué se entiende por inmutable?] (Http://stackoverflow.com/questions/279507/what-is-meant-by-immutable). Si bien el título de esa pregunta no es el mismo, incluye una pregunta sobre ventajas y desventajas, que al menos una de las respuestas (por Imagist) cubre bastante bien. –