Java,运算符重载和字符串的“+”运算符

abh*_*aug 2 java string operator-overloading

我对 Java 中的运算符重载有疑问。我知道Java不支持运算符重载,但是“+”运算符在下面有效的Java程序中做什么:

import java.util.*;
import java.lang.*;
import java.io.*;

class OperatorOverloadingTest
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String str1 = "Operator ";
        String str2 = "overloading";
        String str3 = str1+str2;

        System.out.println(str3);
    }
}

Stdout:
Operator overloading
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

这个运算符并不是“重载”的,它是预定义的运算符,称为字符串连接运算符

\n\n
\n

15.18.1 字符串连接运算符+

\n\n

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

\n
\n\n

换句话说,当 Java 看到

\n\n
String res = stringObj + someObj;\n
Run Code Online (Sandbox Code Playgroud)\n\n

它将表达式替换为代码,该代码通过将现有字符串值与 串联来构造结果字符串someObj.toString()

\n