PROPOSAL: Simplified StringBuffer/StringBuilder syntax (original) (raw)
Joseph D. Darcy Joe.Darcy at Sun.COM
Sun Mar 29 00:22:24 PDT 2009
- Previous message: PROPOSAL: Simplified StringBuffer/StringBuilder syntax
- Next message: PROPOSAL: Simplified StringBuffer/StringBuilder syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Gabriel Belingueres wrote:
I compiled this code:
String getString(List baz) { int i = 2; String foo = "abcd" + "efgh"; if (i % 2 == 0) { foo += "ghij" + 42 + "klmn"; } for (String bar : baz) { foo += bar + "\n"; } return foo; } that decompile to this: String getString(List baz) { int i = 2; String foo = "abcdefgh"; if(i % 2 == 0) foo = (new StringBuilder(String.valueOf(foo))).append("ghij42klmn").toString(); for(Iterator iterator = baz.iterator(); iterator.hasNext();) { String bar = (String)iterator.next(); foo = (new StringBuilder(String.valueOf(foo))).append(bar).append("\n").toString(); } return foo; } Maybe other solution can be make the compiler smarter. Here, the String foo is a local variable that is used as an lvalue only, meaning it is always written and NEVER read (a perfect candidate for optimizing it creating only one StringBuilder) I'm astonished to find that the compiler didn't optimize the += assignment tough.
Generally javac lets HotSpot do the heavy lifting in terms of optimizations.
If you want to try to hack on the compiler and make it smarter, all the code you need is at http://hg.openjdk.java.net/jdk7/jdk7/langtools
-Joe
- Previous message: PROPOSAL: Simplified StringBuffer/StringBuilder syntax
- Next message: PROPOSAL: Simplified StringBuffer/StringBuilder syntax
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]