String, StringBuffer y StringBuilder en Java

La clase String se utiliza en Java, como todos sabréis, para representar una cadena de caracteres inmutable, es decir, que no puede modificarse. Si utilizamos algún método que modifique la cadena, lo que ocurrirá en realidad es que se creará un nuevo objeto String.

Para cadenas de caracteres mutables se utilizaba hasta Java 5 la clase StringBuffer. Desde Java 5 tenemos una nueva opción, StringBuilder, que se diferencia de StringBuffer en que sus métodos no están sincronizados. Esto significa que StringBuilder ofrece mejor rendimiento que StringBuffer, aunque tenemos que tener algo más de cuidado al modificarlo si utilizamos varios threads.

En resumen:

  • Si el texto no va a cambiar: String
  • Si el texto puede cambiar y sólo vamos a tener un hilo trabajando con la cadena: StringBuilder.
  • Si el texto puede cambiar y vamos a tener más de un hilo trabajando con la cadena: StringBuffer.

Sin embargo hay alguna que otra excepción. Por ejemplo cuando se concatenan varios literales o constantes con el operador +, el compilador es suficientemente inteligente para crear un solo objeto String.

public class EjemploString {
  public static void main(String[] args) {
    final String ESPACIO = " ";
    String s = "Hola" + ESPACIO + "Mundo";
  }
}

También es interesante mencionar que la diferencia entre StringBuilder y StringBuffer se ha reducido en Java 6 y la diferencia será menor con Java 7, gracias a las nuevas mejoras en sincronización.

16 pensamientos en “String, StringBuffer y StringBuilder en Java”

  1. Otro que no conocía la clase StringBuilder, resulta muy cómoda como ha mencionado Death Master.

    PD: ¿Qué plugin usas para formatear el código fuente?

  2. @Escarrion, me refiero a cadenas con formatos concretos. Por ejemplo, si tienes un String con formato CSV (comma separated values), puedes crear un nuevo StringTokenizer con dicha cadena, usando como carácter delimitador “,”.

    Cada vez que invoques a “nextToken()” te devolverá automáticamente los valores, sin tener que hacer ningún tipo de comprobación de caracteres, ni eliminar los delimitadores, etc.

  3. Pingback: Colecciones en Java

  4. q aoportazo bueno la verdad es q estoy realizando un corso de preparacion para java y me gustaria saber si existe la traduccion de las api o en su defecto si alguien las tiene para descargar pues en el sitio de sun se cae el link gracias
    por favoer enviarme correo a rdrigo.cancino.y@gmail.com

  5. Pingback: Collection « delprogramador

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.