<div dir="ltr"><div><div><div>Hali!<br><br></div>Nagyon elméleti kérdés lesz... Vegyük például ezt a példa kódot<br><br></div>public static String makeLongString(int a, int b) {<br></div>  return &quot;foo: &quot;+a+&quot; bar:&quot;+b;<br>
<div>}<br clear="all"><div><div><div><br></div><div>Ez ugyanarra fordul le, mintha a kicsit bőbeszédűbb StringBuilder-es kódot írtam volna le:<br><br>public static String makeLongString(int a, int b) {<br>  return new StringBuilder().append(&quot;foo: &quot;).append(a).append(&quot; bar:&quot;).append(b);<br>
}<br clear="all"><div><br></div>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.<br>
</div><div>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:<br>
<br>public static String makeLongString(int a, int b) {<br>  return new StringBuilder(34).append(&quot;foo: &quot;).append(a).append(&quot; bar:&quot;).append(b);<br>}<br clear="all"><div><br></div><div>A kérdés az, hogy bárki tud-e róla miért nem ezt csinálja a javac?</div>
<div><br></div><div>Köszi!<br></div><br></div><div><br>-- <br><br>EOF
</div></div></div></div></div>