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

Laszlo Hornyak laszlo.hornyak at gmail.com
2014. Jún. 3., K, 20:06:04 CEST


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
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20140603/38bbd9a3/attachment.html>


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