+1

On Thu, Dec 17, 2015 at 1:55 PM, Manuranga Perera <m...@wso2.com> wrote:

> My comment is about using plus out side of loops. Obviously we should use
> StringBuilder when using loops. But we shouldn't uses it unnecessary
> outside of loops since it affects readability.
>
> On Thu, Dec 17, 2015 at 11:23 AM, Rasika Perera <rasi...@wso2.com> wrote:
>
>> 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
>>
>
>
>
> --
> 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 3320919blog: **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

Reply via email to