当+;运算符在Java中的两个字符串对象之间使用?

当+;运算符在Java中的两个字符串对象之间使用?,java,Java,Java不支持用户定义的重载运算符。Java允许在两个字符串对象之间使用+运算符。发生这种情况时,+是否会发生一些内部/内置重载,或者会发生什么情况,以便使用++添加两个字符串对象?运算符不会重载。+运算符的行为在,部分中有明确定义: 运算符+和-称为加法运算符 如果+运算符的或操作数的类型为字符串,则该操作为字符串串联 第二节接着说: 如果只有一个操作数表达式的类型为String,则在运行时对另一个操作数执行字符串转换() 字符串串联的结果是对两个操作数字符串串联而成的string对象的引用。

Java不支持用户定义的重载运算符。Java允许在两个字符串对象之间使用+运算符。发生这种情况时,+是否会发生一些内部/内置重载,或者会发生什么情况,以便使用++添加两个字符串对象?

运算符不会重载。
+
运算符的行为在,部分中有明确定义:

运算符
+
-
称为加法运算符

如果
+
运算符的操作数的类型为
字符串
,则该操作为字符串串联

第二节接着说:

如果只有一个操作数表达式的类型为
String
,则在运行时对另一个操作数执行字符串转换()

字符串串联的结果是对两个操作数字符串串联而成的
string
对象的引用。在新创建的字符串中,左操作数的字符位于右操作数的字符之前

“+”运算符(在此上下文中)不是“重载的”,它是预定义的运算符,称为字符串连接运算符

15.18.1字符串串联运算符
+

如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串。 字符串连接的结果是对字符串对象的引用,该对象是 两个操作数字符串的串联。左侧操作数的字符 在新创建的字符串中右操作数的字符之前

换句话说,当Java看到

String res = stringObj + someObj;
它使用代码替换表达式,该代码通过将现有字符串值与
someObj.toString()
串联,来构造生成的字符串


参考资料:

阅读此。。。。顺便说一句,在这种情况下调用的实际实现已经更改了几次,同时在编译器和JIT中进行了高度优化,因此它不仅易于阅读,而且通常比自己处理StringyBuilder append更快。唯一的例外是,如果在多个语句或循环迭代中发生连接。