I wrote a simple test.
public class BuilderTest{ public void testAppend(String name){ StringBuilder sb=new StringBuilder(); sb.append("hello").append(" World: ").append(name); } public void testConcat(String name){ StringBuilder sb=new StringBuilder(); sb.append("hello" +" World: "+name); } } public void testAppend(java.lang.String); Code: Stack=2, Locals=3, Args_size=2 0: new #2; //class java/lang/StringBuilder 3: dup 4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V 7: astore_2 8: aload_2 9: ldc #4; //String hello 11: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 14: ldc #6; //String World: 16: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 19: aload_1 20: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 23: pop 24: return public void testConcat(java.lang.String); Code: Stack=3, Locals=3, Args_size=2 0: new #2; //class java/lang/StringBuilder 3: dup 4: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V 7: astore_2 8: aload_2 9: new #2; //class java/lang/StringBuilder 12: dup 13: invokespecial #3; //Method java/lang/StringBuilder."<init>":()V 16: ldc #7; //String hello World: 18: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 21: aload_1 22: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 25: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/la ng/String; 28: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder; 31: pop 32: return } In the second method it creates a second StringBuilder with the toString() of the first one. I think doing this get some performance. On Fri, Jun 7, 2013 at 11:09 AM, Tom Hawtin <tom.haw...@oracle.com> wrote: > On 07/06/2013 14:54, Andrew Haley wrote: > >> On 06/07/2013 02:18 PM, Otávio Gonçalves de Santana wrote: >> > > sb.append(" xxx: [" + getXXX() + "]\n"); >>> >>> for this: >>> >>> sb.append(" xxx: [").append(getXXX()).append("]**\n"); >>> >> >> Hmm. I wonder that a JIT can't do this automatically. Perhaps >> it already does; I haven't looked. >> > > The capacity of the StringBuilder may be different for the two statements. > So even a "high-level rewriting" wouldn't be sufficiently equivalent. > > Tom > -- Atenciosamente. Otávio Gonçalves de Santana blog: http://otaviosantana.blogspot.com.br/ twitter: http://twitter.com/otaviojava site: http://www.otaviojava.com.br (11) 98255-3513