Ho scoperto che Java supports constant folding of primitive types, ma che dire di String
s?Il compilatore Java include String Constant Folding?
Esempio
Se creo il seguente codice sorgente
out.write(""
+ "<markup>"
+ "<nested>"
+ "Easier to read if it is split into multiple lines"
+ "</nested>"
+ "</markup>"
+ "");
Cosa va nel codice compilato?
Versione combinata? out.write("<markup><nested>Easier to read if it is split into multiple lines</nested></markup>");
Oppure la versione di concatenazione di runtime meno efficiente? 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 concatenazione di stringhe è circa 100 volte più veloce della scrittura su un dispositivo. Non sarebbe molto importante se non lo facesse (ma lo fosse) –
L'ho appena testato sul mio laptop e le sue 50 volte più lente. –
In realtà è un comportamento richiesto da JLS./Puoi vedere il codice generato con 'javap -c'. –