在《Java语言规范中文版(第三版)》中有如下描述:
字符串串接运算符+
如果只有一个操作数表达式的类型是String,那么字符串转换就在另一个操作数上执行,以便在运行时产生字符串。结果是Sring对象[新创建,除非表达式是一个编译时常量表达式]的一个引用,该对象是两个操作数字符串的串接。对应的英文文档The Java® Language Specification (Java SE 7 Edition)中有如下原文:
If only one operand expression is of type String, then string conversion (§5.1.11) is performed on the other operand to produce a string at run time.
The result of string concatenation is a reference to a String object that is the concatenation of the two operand strings. The characters of the left-hand operand precede the characters of the right-hand operand in the newly created string.
The String object is newly created (§12.5) unless the expression is a compile-time constant expression (§15.28).
在一份名为《黑马程序员入学Java知识(精华总结)》的文档中有如下描述:
使用只包含常量的字符串连接符如"aa" + "bb"创建的也是常量,编译期就能确定,已经确定存储到常量池中;
使用包含变量的字符串连接符如"aa" + s1 创建的对象是运行期才创建的,存储在堆中;
以上三份资料,都说明了同样的结果,相信对你会有所帮助。列出参考,一是因为它们可以从网上获取,二是可以有所依据。
|