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

Suller Andras suller.andras at gmail.com
2014. Jún. 5., Cs, 01:48:24 CEST


Hali,

Szerintem a peldad nagyon specialis, azert erzed ugy hogy ebben az
esetben egy picit talan jobb lenne ha a fordito kicsit okosabb lenne.
Altalanosabb esetben nem csak string konstansokat es egesz szamokat
konkatenalsz, hanem jo esellyel van benne egy fuggvenyhivas, vagy egy
string valtozo. Akkor meg az optimalizatio sokkal bonyolultabb kellene
hogy legyen. Osszessegeben meg a feleslegesen lefoglalt nagyobb meretu
memoriadarab akar lassabb is lehet, mint a kicsi memoriadarab.
Arrol nem is beszelve, hogy a dokumentacio vilagosan megmondja, hogy a
stringek osszeadasa StringBuilder-rel van megvalositva, igy ha
optimalizalni akarsz, akkor te magad megcsinalhatod :)

Andras

2014-06-04 2:06 GMT+08:00 Laszlo Hornyak <laszlo.hornyak at gmail.com>:
> 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
>


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