Re: [Dev] String plus compiles to append

2015-12-15 Thread Afkham Azeez
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  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."":()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."":()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/
* *
*email: **az...@wso2.com* 
* cell: +94 77 3320919blog: **http://blog.afkham.org*

*twitter: **http://twitter.com/afkham_azeez*

*linked-in: **http://lk.linkedin.com/in/afkhamazeez
*

*Lean . Enterprise . Middleware*
___
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev


Re: [Dev] String plus compiles to append

2015-12-16 Thread Rasika Perera
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."":()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  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  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."":()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."":()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/
> * *
> *email: **az...@wso2.com* 
> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
> *http://blog.afkham.org* 
> *twitter: **http://twitter.com/afkham_azeez*
> 
> *linked-in: **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


Re: [Dev] String plus compiles to append

2015-12-17 Thread Manuranga Perera
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  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."":()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  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  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."":()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."":()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/
>> * *
>> *email: **az...@wso2.com* 
>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
>> *http://blog.afkham.org* 
>> *twitter: **http://twitter.com/afkham_azeez*
>> 
>> *linked-in: **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
___
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev


Re: [Dev] String plus compiles to append

2015-12-17 Thread Afkham Azeez
+1

On Thu, Dec 17, 2015 at 1:55 PM, Manuranga Perera  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  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."":()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  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 
>>> 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."":()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."":()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/
>>> * *
>>> *email: **az...@wso2.com* 
>>> * cell: +94 77 3320919 <%2B94%2077%203320919>blog: *
>>> *http://blog.afkham.org* 
>>> *twitter: **http://twitter.com/afkham_azeez*
>>> 
>>> *linked-in: **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.ent