Desde java 1.5 tenemos la clase StringBuilder. Esta clase es similar a StringBuffer, pero con la diferencia de que no es segura para su uso con varios hilos. Esto, si sólo usamos un hilo, la hace más eficiente que el uso de StringBuffer, ya que no tiene los métodos sincronizados.
La clase StringBuilder es ideal para esos String que construimos a base de concatenar trozos localmente dentro de un método, por ejemplo, para sacar una salida por pantalla o construir una sentencia SQL.
Hay sin embargo un curioso detalle más. El compilador de java es listo y si concatenamos cadenas con el típico +, como por ejemplo
String unaCadena = "hola, " + tuNombre + ". ¿Cómo estas?";
el compilador reemplaza todo esto por una construcción en condiciones usando StringBuilder. En tiempo de ejecución ese código es igual de eficiente que si usáramos StringBuilder y más eficiente que si usamos StringBuffer, contrariamente a lo que pasaba en las primeras versiones de java.
Ahora me alegro de no haberme acostumbrado nunca al uso de StringBuffer.
Tienes todo esto mucho más detallado en Manipulación de cadenas en java.
Bueno, no he hecho pruebas, pero según lo que está documentado el compilador ya hacía esto pero con StringBuffer hace tiempo http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html
Quizás desde java5 tendrá mejor rendimiento los ‘+’ que el StringBuffer pero no con StringBuilder.
Los String siguen siendo invariantes(http://java.sun.com/javase/6/docs/api/java/lang/String.html), al final es lo mismo que antaño pero debemos utilizar StringBuilder para mejorar el rendimiento.
El problema claro, código heredado que utilice StringBuffer.
Saludos!
Hola:
Como comento en el post, el compilador se encarga de reemplazar nuestros + por StringBuilder, así que el resultado final es exactamente el mismo en ambos casos.
Se bueno.
En el código heredado, se pueden reemplazar perfectamente (salvo objetos usados por varios hilos) StringBuffer por StringBuilder, ya que los métodos son idénticos. El rendimiento es aproximadamente el doble de velocidad, y salvo en cadenas realmente largas, inapreciable.
En lo del +, un matiz, el compilador lo sustituye por StringBuilder pero ojo a los +=
Me explico con un ejemplo:
String x = «»;
for (int i=0; i
Como comenta -o intenta comentar- Bert, si no hacemos los + todos seguidos, sino que los metemos en un bucle
String x=»»;
for (int i=0;i…)
x+=»cachoString»
el compilador no hace la sustitución, puesto que en cada iteración debe tener un String x relleno parcialmente.
Se bueno.
Traté de ponerlo, pero me pasé de largo y wordpress lo cortó (creo).
Se puede resumir el uso de StringBuilder, como dicen en la pagina que enlazas:
-Si es una unica sentencia, con +
-Si no StringBuilder
Me alegro de que te gustara el artículo 🙂
¡Pero no uses concatenaciones de cadenas para construir SQLs, salvo en casos muy concretos! A menos que estés muy seguro de lo que estás haciendo…
Las consultas parametrizadas te ayudan en cuanto a seguridad… y la seguridad importa, más si hablamos de aplicaciones web.
¡Un abrazo!