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.
Hace algún tiempo escribí un post sobre este tema en mi blog. Realmente no digo mucho más, pero por si os interesa:
http://java-spain.com/curiosidades-java-optimizacion-strings-ii
StringBuffer si lo conocía.. ahora que era la primera vez que escuchaba hablar de la clase StringBuilder… genial aporte!
Aunque no está directamente relacionada, hay una clase llamada StringTokenizer que trabaja con Strings y resulta ideal para tratar cadenas formateadas. 😉
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?
Interesante, no conocia esto y se que me va a servir.
@Skatox no es un plugin, es un script en JavaScript: SyntaxHighlighter
@Dead Master, que pena la ignorancia, pero que son cadenas formateadas; yo solo he usado string tokenizer para tratar directamente con los caracteres de un string.
Tampoco conocia StringBuilder, buen aporte zootropo, como siempre
@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.
Pingback: Colecciones en Java
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
Oye muy buena informacion gracias.
Para los que tienen pensado certificarse en SCJP, este tema es un punto que se evalua en el examen.
estudiantes de ingenieria en sistemas estudiar todo lo relacionado a programacion 1 es pesado ponganle mente
Pingback: Collection « delprogramador
no se si alguien podria subir algun ejemplo con la clase StringBuffer.