[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