Concatenar cadenas de carácteres
Artículo por Club Developers · 18 mayo 2006
5270 vistas
Es bueno saber cómo Java gestiona las cadenas y las concatenaciones para manipularlas eficientemente.
La clase String:
En Java, a una instancia de la clase String se le llama nomutable, es decir, que después de ser creada, la cadena no puede ser modificada. Esto es muy práctico en muchas situaciones: es un a tonterÃa, por ejemplo, duplicar una instancia de String para asegurarse que no cambiará (como pasa en C++ por ejemplo). Pero esta propiedad resulta desastrosa con el empleo del operador '+' para concatenar cadenas debido a que cada etapa de la concatenación implica la construcción de una nueva instancia de String.
En la ejecución de este trozo de código, cada iteración del bucle crea una nueva instancia de String, lo que obliga a que la JVM busque memoria para instanciar el nuevo objeto, copiar el contenido de las 2 cadenas y liberar la memoria anterior.
La clase StringBuffer:
La clase java.lang.StringBuffer es una clase que gestiona una cadena modificable. Esta clase se ha creado especialmente para manipular cadenas de carácteres....
Este trozo de código produce el mismo resultado que el anterior, con la diferencia que éste sólo instancia una sola vez el objeto.
La clase StringBuilder:
Desde J2SE 5.0, también podemos usar la clase StringBuilder (del package java.lang). Su funcionamiento es idéntico al de StringBuffer con la diferencia que éste no es "thread-safe". Si no necesitamos sincronización, mejor usar StringBuilder ya que será más eficiente.
Nota:
Si no se precisa la medida máxima o nos quedamos corto, StringBuffer/StringBuilder recrearán automáticamente la tabla de carácteres para poder albergar todo el texto, pero esto es igual de costoso que la creación de una nueva instancia de String, por lo que es conveniente escoger inicialmente un valor lo suficientemente elevado.
La clase String:
En Java, a una instancia de la clase String se le llama nomutable, es decir, que después de ser creada, la cadena no puede ser modificada. Esto es muy práctico en muchas situaciones: es un a tonterÃa, por ejemplo, duplicar una instancia de String para asegurarse que no cambiará (como pasa en C++ por ejemplo). Pero esta propiedad resulta desastrosa con el empleo del operador '+' para concatenar cadenas debido a que cada etapa de la concatenación implica la construcción de una nueva instancia de String.
java
En la ejecución de este trozo de código, cada iteración del bucle crea una nueva instancia de String, lo que obliga a que la JVM busque memoria para instanciar el nuevo objeto, copiar el contenido de las 2 cadenas y liberar la memoria anterior.
La clase StringBuffer:
La clase java.lang.StringBuffer es una clase que gestiona una cadena modificable. Esta clase se ha creado especialmente para manipular cadenas de carácteres....
java
for( int i=0; i<10; i++) { Â Â Â Â sb.append(i); }
Este trozo de código produce el mismo resultado que el anterior, con la diferencia que éste sólo instancia una sola vez el objeto.
La clase StringBuilder:
Desde J2SE 5.0, también podemos usar la clase StringBuilder (del package java.lang). Su funcionamiento es idéntico al de StringBuffer con la diferencia que éste no es "thread-safe". Si no necesitamos sincronización, mejor usar StringBuilder ya que será más eficiente.
Nota:
Si no se precisa la medida máxima o nos quedamos corto, StringBuffer/StringBuilder recrearán automáticamente la tabla de carácteres para poder albergar todo el texto, pero esto es igual de costoso que la creación de una nueva instancia de String, por lo que es conveniente escoger inicialmente un valor lo suficientemente elevado.