textos texto numero metodo inicio concatenar concatenacion concatena como java performance string concatenation

texto - ¿Qué sucede cuando Java Compiler ve muchas concatenaciones de cadenas en una línea?



concatenar textos java (1)

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 "omn" + "blablabla" 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 de rendimiento en (creo) Java 5; antes de eso, se usó StringBuffer.

Edición : como se señaló en los comentarios, las cadenas estáticas solo se concilian previamente si están al principio 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";

se compilaría así:

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

Supongamos que tengo una expresión en Java como:

String s = "abc" + methodReturningAString() + "ghi" + anotherMethodReturningAString() + "omn" + "blablabla";

¿Cuál es el comportamiento del compilador JDK predeterminado de Java? ¿Hace las cinco concatenaciones o hay un truco de rendimiento inteligente hecho?