StringBuffer - StringBuilder

Hoy hablaremos de las clases StringBuffer y StringBuilder.
En la versión del jdk 1.4 se creó la clase StringBuffer que permitía y permite la manipulación de buffer de cadenas teniendo la ventaja, ante la clase String, que podemos utilizar los diferentes métodos para modificar,agregar y eliminar de la cadena uno o varios caracteres.
En esta clase, entre los métodos que contienen, se encuentran los métodos:
- append(..)
- insert(..)
que vienen siendo los más usados de esta clase, en la práctica ambos métodos tienen la misma funcionalidad con la diferencia que el método append() siempre ingresará el dato al final del buffer y el método insert nos permitirá ingresar el dato en la posición que necesitemos y ambos métodos se encuentran sobrecargados para permitir el uso de cualquier tipo de dato.
Una de las ventajas que podemos encontrar con esta clase en términos de rendimiento y optimización de código es la disminución de cadenas temporales al permitirnos concatenar cadenas con el método append() y no usar el signo más. Esta ventaja es la que lleva a recomendar su uso en la programación móvil por el rendimiento.
Ejemplo:

   String strCadena="ampliando"+"conocimientos"+"java";
   StringBuffer bufferString = new StringBuffer();
   bufferString.append("ampliando").append("conocimientos").append("java");

Ahora no todo es tan bonito como parece, la desventaja que presenta es su comportamiento de sincronización en los métodos, que en términos de funcionalidad de subprocesos es fabuloso pero en rendimiento no lo es.
Esta desventaja trajo la creación de la clase StringBuilder en la versión 1.5, que nos permite el mismo comportamiento e inclusive es compatible con clase StringBuffer.
Se entiende que se eliminó la sincronización de los métodos por lo que solo permitirá el uso de un solo hilo.
La última recomendación realizada por el personal de oracle (antigua Sun, no me acostumbro todavía :D), es el uso de StrinBuilder, siempre y cuando no sea para varios subprocesos.

Para terminar un detalle bastante importante con ambas clases inicializan por defecto con una longitud de 16 sumados a la longitud del valor o cadena ingresada inicialmente.
Verificar el método setLength(); para la longitud.

No hay comentarios: