Dependiendo de lo que quieras hacer, esta información te podrá ser útil. Si estamos “concatenando” cadenas en JAVA debemos tener siempre presente algo que debería ser siempre una buena práctica presente.
Por lo general, se concatena con String de la siguiente forma:
String a = “Esto es una prueba”; a+= “ de concatenar ”;
Pues esto es tan malo como lo siguiente:
String a = “Esto es una prueba”; String b = “ de concatenar”; String ab = a + b;
Lo que pasa, es que cuando concatenamos con el “+=” lo que realmente hacemos es generar un nuevo objeto de tipo String, por lo que en rendimiento no es una buena práctica, sobre todo si queremos concatenar largas cadenas como por ejemplo una query. Aquí es donde entra StringBuffer y StringBuilder.
Por definición:
- StringBuffer: La gracia de éste, es que podemos concatenar una secuencia de caracteres mutables de manera simple y sincronizada. Por lo que es perfecto para trabajar con multihilos.
Para su utilización:
StringBuffer a = new StringBuffer(); a.append("Esto es una prueba"); a.append(" de concatenar"); System.out.println(a.toString()); // Imprimiendo como String con .toString()
- StringBuilder: Es el recomendado para concatenar cadenas, como no trabaja de forma sincronizada es mucho más veloz que el StringBuffer.
Para su utilización:
StringBuilder a = new StringBuilder(); a.append("Esto es una prueba"); a.append(" de concatenar"); System.out.println(a.toString()); // Imprimiendo como String con .toString()
Para mayor información puedes revisar la documentación oficial de Java sobre StringBuffer y StringBuilder.
Si deseas ver el rendimiento en comparación puedes verlo en el siguiente ejemplo:
public class Example { public void ejecutaString(){ String pruebaString = ""; Long start = System.currentTimeMillis(); for(int i = 0; i <= 10000000; i++){ pruebaString += ""; } Long end = System.currentTimeMillis(); System.out.println("Tiempo del string = "+(end-start)); } public void ejecutaStringBuilder(){ StringBuilder stBuilder = new StringBuilder(); Long start = System.currentTimeMillis(); for(int i = 0; i <= 10000000; i++){ stBuilder.append(""); } Long end = System.currentTimeMillis(); System.out.println("Tiempo del StringBuilder = "+(end-start)); } public void ejecutaStringBuffer(){ StringBuffer stBuffer = new StringBuffer(); Long start = System.currentTimeMillis(); for(int i = 0; i <= 10000000; i++){ stBuffer.append(""); } Long end = System.currentTimeMillis(); System.out.println("Tiempo del StringBuffer = "+(end-start)); } public static void main(String[] args){ Example m = new Example(); m.ejecutaString(); m.ejecutaStringBuilder(); m.ejecutaStringBuffer(); } }
El rendimiento de StringBuilder en comparación del resto es bastante más eficiente:
Tiempo del string = 590 Tiempo del StringBuilder = 14 Tiempo del StringBuffer = 294