JLS string concatenation clarification

Louis Wasserman lowasser at google.com
Tue Jan 21 09:59:36 PST 2014

JLS 15.18.1 states:

> The String object is newly created (§12.5<http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5>)
> unless the expression is a compile-time constant expression (§15.28<http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28>
> ).

JLS 12.5 states:

>  Execution of a string concatenation operator (§15.18.1<http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.18.1>)
> that is not part of a constant expression (§15.28<http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28>)
> sometimes creates a new String object to represent the result.

It's not clear to me, from reading this, whether string concatenation with
+ *always* creates a new String object or *sometimes *creates a new String
object.  15.18.1 seems to imply always, but 12.5 says "sometimes."

My understanding is that String.concat used to be used for string
concatenation, and String.concat currently returns its receiver if its
argument is the empty string.  This seems to be evidence for the
"sometimes" interpretation.

Louis Wasserman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20140121/24476c0f/attachment.html 

More information about the compiler-dev mailing list