Hi All,

Please find comments inline.

Yes, this has been the case for sometime where internally append is used.
> Try the same with a loop.

+1 have tried this. Even though compiler is optimized to put StringBuilder
on multiple "+" concats not too *smart* to use the same StringBuilder
instance inside a loop.

Tried Test.java with a string concat inside a *loop*.

*Test.java*
class Test {
public static void main(String[] args) {
String content = "";
for (int i = 0; i < 10; i++) {
content = content + String.valueOf(i);
}
System.out.println(content);
}
}

*Constant pool:*
const #3 = class #24; //  java/lang/StringBuilder

*Main Method:*
public static void main(java.lang.String[]);
  Code:
   0: ldc #2; //String
   2: astore_1
   3: iconst_0
   4: istore_2
   5: iload_2
   6: bipush 10
   8: if_icmpge 39
   11: new #3; //class java/lang/StringBuilder <-------*creating new String
builder each cycle*
   14: dup
   15: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
   18: aload_1
   19: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   22: iload_2
   23: invokestatic #6; //Method
java/lang/String.valueOf:(I)Ljava/lang/String;
   26: invokevirtual #5; //Method
java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   29: invokevirtual #7; //Method
java/lang/StringBuilder.toString:()Ljava/lang/String;
   32: astore_1
   33: iinc 2, 1
   36: goto 5 <--------------- *Jump for the loop*
   39: getstatic #8; //Field java/lang/System.out:Ljava/io/PrintStream;
   42: aload_1
   43: invokevirtual #9; //Method
java/io/PrintStream.println:(Ljava/lang/String;)V
   46: return
}

Thanks,
Rasika

On Wed, Dec 16, 2015 at 6:19 AM, Afkham Azeez <az...@wso2.com> wrote:

> Yes, this has been the case for sometime where internally append is used.
> Try the same with a loop.
>
> On Tue, Dec 15, 2015 at 11:43 PM, Manuranga Perera <m...@wso2.com> wrote:
>
>> I have compiled following class using javac 1.6.0_38
>>
>> class X{
>>     public String m(String a, String b, String c){
>>         return a + b + c;
>>     }
>> }
>>
>>
>> and decoupled using javap
>>
>>
>> class X {
>>   X();
>>     Code:
>>        0: aload_0
>>        1: invokespecial #1                  // Method
>> java/lang/Object."<init>":()V
>>        4: return
>>
>>   public java.lang.String m(java.lang.String, java.lang.String,
>> java.lang.String);
>>     Code:
>>        0: new           #2                  // class
>> java/lang/StringBuilder
>>        3: dup
>>        4: invokespecial #3                  // Method
>> java/lang/StringBuilder."<init>":()V
>>        7: aload_1
>>        8: invokevirtual #4                  // Method
>> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>>       11: aload_2
>>       12: invokevirtual #4                  // Method
>> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>>       15: aload_3
>>       16: invokevirtual #4                  // Method
>> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
>>       19: invokevirtual #5                  // Method
>> java/lang/StringBuilder.toString:()Ljava/lang/String;
>>       22: areturn
>> }
>>
>> As you can see, there are three appends but only one StringBuilder
>> objects. Therefor I purpose using plus instead of append in our code.
>>
>>
>>
>> --
>> With regards,
>> *Manu*ranga Perera.
>>
>> phone : 071 7 70 20 50
>> mail : m...@wso2.com
>>
>
>
>
> --
> *Afkham Azeez*
> Director of Architecture; WSO2, Inc.; http://wso2.com
> Member; Apache Software Foundation; http://www.apache.org/
> * <http://www.apache.org/>*
> *email: **az...@wso2.com* <az...@wso2.com>
> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
> *http://blog.afkham.org* <http://blog.afkham.org>
> *twitter: **http://twitter.com/afkham_azeez*
> <http://twitter.com/afkham_azeez>
> *linked-in: **http://lk.linkedin.com/in/afkhamazeez
> <http://lk.linkedin.com/in/afkhamazeez>*
>
> *Lean . Enterprise . Middleware*
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
With Regards,

*Rasika Perera*
Software Engineer
M: +94 71 680 9060 E: rasi...@wso2.com
LinkedIn: http://lk.linkedin.com/in/rasika90

WSO2 Inc. www.wso2.com
lean.enterprise.middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to