Pavel, thanks for the checking and confirm. Look back to the benchmark code:
private StringBuilder createBuilder(String... values) { StringBuilder text = new StringBuilder(); text.append(values[0]).append(values[1]) .append(values[2]).append(values[3]) .append(values[4]).append(values[5]); return text; } private StringBuilder createBuilderWithConcat(String... values) { StringBuilder text = new StringBuilder(); text.append(values[0] + values[1]) .append(values[2] + values[3]) .append(values[4]+ values[5]); return text; } Comparing to createBuilder, the code similar to (values[0] + values[1]) in createBuilderWithConcat may take additional memory and CPU cycles to create new StringBuffer objects. As may be able to explain the benchmark result. Therefore, I think it might not be necessary to make this change (replacing string "+" operator with StringBuilder append()). Xuelei On 8/26/2014 4:41 PM, Pavel Rappo wrote: > It's exactly the way it's been working since 1.6 I believe. > > <source> > > public class Optimization { > > public String concat(String... strings) { > return "#: " + strings[0] + strings[2] + strings[3] + "..."; > } > } > > <compiled into> > > public class Optimization { > public Optimization(); > Code: > 0: aload_0 > 1: invokespecial #1 // Method > java/lang/Object."<init>":()V > 4: return > > public java.lang.String concat(java.lang.String...); > Code: > 0: new #2 // class java/lang/StringBuilder > 3: dup > 4: invokespecial #3 // Method > java/lang/StringBuilder."<init>":()V > 7: ldc #4 // String #: > 9: invokevirtual #5 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 12: aload_1 > 13: iconst_0 > 14: aaload > 15: invokevirtual #5 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 18: aload_1 > 19: iconst_2 > 20: aaload > 21: invokevirtual #5 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 24: aload_1 > 25: iconst_3 > 26: aaload > 27: invokevirtual #5 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 30: ldc #6 // String ... > 32: invokevirtual #5 // Method > java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; > 35: invokevirtual #7 // Method > java/lang/StringBuilder.toString:()Ljava/lang/String; > 38: areturn > } > > -Pavel > > On 26 Aug 2014, at 06:20, Xuelei Fan <xuelei....@oracle.com> wrote: > >> I was wondering, is it nice to address it in Java compiler to use string >> builder for the string "+" operator? >> >> Xuelei >> >> >> On 8/26/2014 11:28 AM, Wang Weijun wrote: >>> New webrevs available at >>> >>> http://cr.openjdk.java.net/~weijun/8055723/client/webrev.01/ >>> http://cr.openjdk.java.net/~weijun/8055723/core/webrev.01/ >>> >>> There are only 2 now. Everything non-client is in core. >>> >>> Everyone, please do code review quickly because the patch touches too many >>> files and any delay could mean re-merge. >>> >>> *Otávio*: If there is only small change in feedback, tell me to update my >>> own repo and you don't need to generate the big patch again. >>> >>> I see you still include that demo file. >>> >>> Thanks >>> Max >>> >>> >> >