使用字符串重载Java运算符+;人物

使用字符串重载Java运算符+;人物,java,operator-overloading,Java,Operator Overloading,我有疑问,如果我问错了,请纠正我 问题是 String s="hello"; String s1=' ';//error String s2=s+' '; 我知道第1行是正确的,第2行是错误的,因为我们可以初始化chara='' 但我在第3行中感到困惑,我读到java中的+运算符可用于与字符串连接 但是它接受像'这样的字符,原因是什么?操作符重载严重。几乎什么都可以 如果其中一方是字符串,则另一方将转换为字符串。这适用于char以及其他基本类型。

我有疑问,如果我问错了,请纠正我 问题是

        String s="hello";
        String s1=' ';//error
        String s2=s+' ';
我知道第1行是正确的,第2行是错误的,因为我们可以初始化
chara=''
但我在第3行中感到困惑,我读到java中的
+
运算符可用于与字符串连接
但是它接受像
'
这样的字符,原因是什么?

操作符重载严重。几乎什么都可以


如果其中一方是字符串,则另一方将转换为字符串。这适用于
char
以及其他基本类型。对于对象,调用
toString()
(在空检查之后)。

JLS 15.18.1。字符串连接运算符+

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

字符串转换仅适用于二进制
+
运算符的一个操作数,当另一个操作数是字符串时,该操作数不是字符串

在这种特殊情况下,将
+
的非字符串操作数转换为字符串(§5.1.11),并按照§15.18.1的规定对
+
运算符进行求值


因为Java就是这样实现的。类似于做
s+5
,它被转换成字符串。对于非原语,
toString()
将被调用,因为Emigh yes i doised注意:如果
s
字符串
a
b
是整数,请小心使用
s+a+b
之类的东西。这与
s+(a+b)
不同。第一个将每个整数转换为字符串,并依次追加字符串。第二个是先加整数。请解释一下这个字符串s2=s+'';是错误字符串s2=s+“”;is细字符串s2=s+'a';是works@jenuine看起来您的第一个示例有两个单引号,即
字符串s2=s+'
?这不是合法的语法。单引号用于字符文字,不能有没有字符的字符文字。(或包含2个或更多字符。)Java编译器不会在任何地方接受
'