Descubrí que Java supports constant folding of primitive types, pero ¿qué hay de String
s?¿El compilador Java incluye String Constant Folding?
Ejemplo
Si creo el siguiente código
out.write(""
+ "<markup>"
+ "<nested>"
+ "Easier to read if it is split into multiple lines"
+ "</nested>"
+ "</markup>"
+ "");
Qué entra en el código compilado?
¿Versión combinada? out.write("<markup><nested>Easier to read if it is split into multiple lines</nested></markup>");
¿O la versión menos eficiente de concatenación en tiempo de ejecución? out.write(new StringBuilder("").append("<markup>").append("<nested>").append("Easier to read if it is split into multiple lines").append("</nested>").append("</markup>").append(""));
La concatenación de cadenas es aproximadamente 100 veces más rápida que escribir en un dispositivo. Realmente no importaría mucho si no lo hiciera (pero lo hace) –
Acabo de probarlo en mi computadora portátil y es 50 veces más lento. –
En realidad, es el comportamiento requerido por el JLS./Puede ver el código generado con 'javap -c'. –