[Javalist] StringBuilder találós kérdés

Richard O. Legendi richard.legendi at gmail.com
2014. Jún. 3., K, 21:06:35 CEST


Hi!

Nézted a generált kódot? Milyen verzióval fordítottad? Én 1.7._0_02-vel 
néztem most, és ugyanúgy látom a bipush 34-et meg a StringBuilder 
konstruktor hívást.

Szerintem max. csak akkor fordít konkatenációra, ha literálokkal játszol.

Ricsi

On 2014.06.03. 20:06, Laszlo Hornyak wrote:
> Hali!
>
> Nagyon elméleti kérdés lesz... Vegyük például ezt a példa kódot
>
> public static String makeLongString(int a, int b) {
>   return "foo: "+a+" bar:"+b;
> }
>
> Ez ugyanarra fordul le, mintha a kicsit bőbeszédűbb StringBuilder-es 
> kódot írtam volna le:
>
> public static String makeLongString(int a, int b) {
>   return new StringBuilder().append("foo: ").append(a).append(" 
> bar:").append(b);
> }
>
> Ez egész jónak tűnik, de egy apróság hiányzik. Ha átpasszolná a 
> StringBuilder-nek, hogy mekkora buffer-re lesz szüksége, akkor kód 
> nyerhetne egy kicsit azon, hogy a StringBuilder-nek nem kell 
> újraallokálnia a bufferét.
> Például a fenti példá kódra azt mondhatná a compiler, hogy van két 
> string, azok együtt 10 karakter, plusz az int maximum 12 karaketeren 
> fér ki, akkor az összesen 34 karakter, így megúsznánk több 
> újraallokációt is, ha az alábbi módon előre lefoglalná a buffert:
>
> public static String makeLongString(int a, int b) {
>   return new StringBuilder(34).append("foo: ").append(a).append(" 
> bar:").append(b);
> }
>
> A kérdés az, hogy bárki tud-e róla miért nem ezt csinálja a javac?
>
> Köszi!
>
>
> -- 
>
> EOF
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist

--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20140603/52cc9fc4/attachment.html>


További információk a(z) Javalist levelezőlistáról