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