It generates the equivalent of:
String s = new StringBuilder("abc")
.append(methodReturningAString())
.append("ghi")
.append(anotherMethodReturningAString())
.append("omn")
.append("blablabla")
.toString();
It is smart enough to pre-concatenate static strings (i.e. the "omn" + "blablabla"
). You could call the use of StringBuilder
a "performance trick" if you want. It is definitely better for performance than doing five concatenations resulting in four unnecessary temporary strings. Also, use of StringBuilder was a performance improvement in (I think) Java 5; prior to that, StringBuffer was used.
Edit: as pointed out in the comments, static strings are only pre-concatenated if they are at the beginning of the concatenation. Doing otherwise would break order-of-operations (although in this case I think Sun could justify it). So given this:
String s = "abc" + "def" + foo() + "uvw" + "xyz";
it would be compiled like this:
String s = new StringBuilder("abcdef")
.append(foo())
.append("uvw")
.append("xyz")
.toString();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…