Suggestion: Add the method isEmpty in the classes StringBuilder and StringBuffer

Ulf Zibis Ulf.Zibis at CoSoCo.de
Mon Feb 11 20:08:04 UTC 2013


Am 11.02.2013 16:39, schrieb Hildeberto Mendonça:
> On Mon, Feb 11, 2013 at 3:29 PM, Ulf Zibis <Ulf.Zibis at cosoco.de <mailto:Ulf.Zibis at cosoco.de>> wrote:
>
>     Am 11.02.2013 12:54, schrieb Hildeberto Mendonça:
>
>         we have a scenario where a project with approximately 500K lines of code is
>         going through a large refactoring. One of the changes was to replace string
>         concatenations in loops by StringBuilder.
>
>
>     Are you aware, that behind the scenes, String concatenations are automatically internally
>     replaced from javac by StringBuilder invocations, so in the end you might have less readable
>     code, which is still not faster than before.
>
>
> Yes, I am. On my understanding the compiler can handle that with concatenations like this:
>
> str += "text" + "another" + str2;
>
> but I'm not sure it happens when concatenations are more complex, such as the hypothetical example 
> below:
>
> if(str.isEmpty()) {
>    str = "best cars: ";
>    boolean firstCar = true;
>    for(Car car: cars) {
>       if(firstCar) {
>          firstCar = false;
>       }
>       else {
>          str += ", ";
>       }
>       str += car.getName();
>
>       if(car.getBrand() != null) {
>          str += " - " + car.getBrand();
>       }
>    }
>    str += ".";
> }
>
> I believe, in each iteration, the String is converted to a StringBuilder, appended to, and 
> converted back to a String.

Hi Hildeberto,

maybe your believe is correct.
You could have a look in the byte code by javap.

And additionally you could run a benchmark for both alternatives and compare, if HotSpot compiler 
would be able to optimize both with same result.

I would like to know the result :-)

-Ulf




More information about the core-libs-dev mailing list