2009-08-18 2 views

Respuesta

40

genera el equivalente de:

String s = new StringBuilder("abc") 
      .append(methodReturningAString()) 
      .append("ghi") 
      .append(anotherMethodReturningAString()) 
      .append("omn") 
      .append("blablabla") 
      .toString(); 

Es lo suficientemente inteligente como para pre-concatenar cadenas estáticas (es decir, el "omn" + "blablabla"). Puede llamar al uso de StringBuilder un "truco de rendimiento" si lo desea. Definitivamente es mejor para el rendimiento que hacer cinco concatenaciones que resultan en cuatro cadenas temporales innecesarias. Además, el uso de StringBuilder fue una mejora en el rendimiento en (creo) Java 5; antes de eso, se usó StringBuffer.

Editar: como se señala en los comentarios, las cadenas estáticas solo se concatenan previamente si están al comienzo de la concatenación. Hacer lo contrario rompería el orden de las operaciones (aunque en este caso creo que Sun podría justificarlo). Así que dado esto:

String s = "abc" + "def" + foo() + "uvw" + "xyz"; 

sería compilado la siguiente manera:

String s = new StringBuilder("abcdef") 
      .append(foo()) 
      .append("uvw") 
      .append("xyz") 
      .toString(); 
+0

+1. Vi el StringBuilder y estaba todo listo para publicar una aclaración hasta que llegué al fondo y encontré que ya te habías ocupado de eso. –

+0

sí, no podía recordar cuál era el correcto, tuve que buscarlo después de mi revisión inicial – Kip

+0

En realidad, me refería a la concatenación de literales de cadena. A primera vista, pensé que habías usado un '.append' para cada cadena. –

Cuestiones relacionadas