Por qué usar StringBuilder
Hoy aprenderemos para qué se usa StringBuilder y por qué es tan importante
A veces usando Java, sobre todo cuando apenas nos enseñan el lenguaje, solemos hacer así no?
String frase = "Los primeros 100 números son: ";
for(int i = 1; i <= 100; i++){
frase += i + ",";
}
System.out.println(frase);
Sí, imprimirá los primeros 100 números dentro del String, normalmente vemos el resultado y con eso conformes, no? ¿Qué pasa si te digo que en concatenaciones más "serias" esto puede patear la memoria de la JVM? Pues sí, concatenar Strings en bucles grandes puede llevar a problemas de memoria.
Java es un lenguaje orientado a objetos, y los objetos (como String) viven en el heap, es decir, la parte dinámica de la memoria. Ahora, aunque += parece algo simple, lo que realmente está haciendo Java por debajo en cada vuelta del bucle es algo como esto:
String frase = "Los primeros 100 números son: ";
for(int i = 1; i <= 100; i++){
frase = new StringBuilder(frase).append(i).append(",").toString();
}
System.out.println(frase);
O sea, que en cada iteración:
-
Se crea un
StringBuildernuevo con el contenido defrase. -
Se le añade el número y la coma.
-
Y se transforma de nuevo en un
String.
Eso, una y otra vez, va generando montones de objetos nuevos que se almacenan en el heap. No lo notas si el bucle es pequeño, pero cuando escalas a bucles con miles o millones de iteraciones (o anidados), la cosa se pone fea: empieza a intervenir el Garbage Collector más seguido y el rendimiento de tu app cae.
¿Cómo lo solucionamos? Usamos StringBuilder de forma más inteligente:
StringBuilder frase = new StringBuilder("Los primeros 100 números son: ");
for(int i = 1; i <= 100; i++){
frase.append(i).append(",");
}
System.out.println(frase.toString());
Así que ya sabes: si estás concatenando cadenas dentro de un bucle, no te quedes con el += solo porque funciona. Usar StringBuilder no solo mejora tu código, también evita problemas de rendimiento cuando el programa empieza a crecer.
Este tipo de detalles marcan la diferencia cuando trabajas con más datos o en proyectos más grandes. Y lo mejor es que empiezas a pensar como la JVM: no solo en que algo funcione, sino en cómo lo está haciendo por dentro.
