¿Cuáles son las ventajas de los objetos StringBuilder en comparación con los objetos String?
En términos de procesamiento de cadenas, C# proporciona tres clases: String, StringBuffer y StringBuilder. Entonces, ¿cuáles son sus ventajas y desventajas y cuándo debo utilizar a quién? Aquí explicamos los siguientes puntos: Una vez que se asigna o crea una instancia de una cadena, no se puede cambiar. Si se asigna un nuevo valor, la dirección de memoria debe volver a abrirse para su almacenamiento. La clase StringBuffer utiliza los métodos append e insert para cambiar el valor de la cadena. Solo necesita realizar operaciones continuas en la dirección de memoria donde está almacenado el objeto original, lo que reduce la sobrecarga de recursos. Por lo tanto: cuando se requieren operaciones de modificación frecuentes en cadenas, primero cree un objeto de clase StringBuffer para la operación y finalmente convierta el resultado en un objeto de clase String y devuélvalo, lo que será mucho más eficiente.
StringBuffer (StringBuilder) en realidad se puede considerar como una clase contenedora de cadena de "tipo de datos básico", al igual que int y su correspondiente Integer, etc. StringBuffer tiene un caché. Si declara una cadena solo para recibir los parámetros pasados y luego realiza el procesamiento de lógica de negocios, si usa muchos objetos de tipo StringBuffer, desperdiciará memoria. 2. En el empalme de cadenas, el objeto String no es más lento que el objeto StringBuffer. De hecho, la JVM lo entiende como el empalme de objetos StringBuffer, por lo que el objeto String no es más lento que el objeto StringBuffer, especialmente la siguiente generación de objetos de cadena. String es mucho más rápido que StringBuffer.
String S1 = "Esto es sólo una " " simple " " prueba"
StringBuffer Sb = new StringBuilder("Esto es sólo un").append(" simple") .append(" test");
Se sorprenderá al descubrir que la velocidad de generación de objetos String S1 es simplemente demasiado rápida y la velocidad de StringBuffer no es ventajosa en absoluto. De hecho, este es un pequeño truco de la JVM. A los ojos de la JVM, esta
String S1 = "Esto es sólo una " " simple " "prueba " es en realidad:
;String S1 = "Esto es sólo una prueba sencilla"; Por supuesto, no llevará mucho tiempo. Pero debes tener en cuenta que si tu cadena proviene de otro objeto de cadena, no será tan rápido, por ejemplo:
String S2 = "Esto es sólo un"
; String S3 = "simple";
String S4 = "test";
String S1 = S2 S3 S4
En este momento, la JVM se ejecutará; hacerlo en la forma original 3. La seguridad de los subprocesos es diferente
Variable de cadena StringBuffer (segura para subprocesos)
Variable de cadena StringBuilder (no segura para subprocesos)