隐式类型转换不应该从 char 到 String。这怎么可能 ?

implicit type casting should not works from char to String. How is this possible ?

从 char 转换为 String 应该会导致以下错误: 此代码:

char [] arr = {'H', 'e', 'l', 'l', 'o'};
        String c = arr[1]; 

Error :Type mismatch: cannot convert from char to String

此代码:

char [] arr = {'H', 'e', 'l', 'l', 'o'};
String c = "";
for(char i : arr) {
    c += i;
}

Works.

+= 运算符与 + 运算符一样,当其中一个操作数是 String 而另一个不是时,将执行 string conversion

带有 += 的代码将使用字符串转换将 ichar 转换为 String 以连接到 cString.

带有 = 的代码将不会使用字符串转换,因为根据 JLS, Section 5.2.

,它不在赋值上下文可接受的转换列表中

由于String是不可变的,编译器实际上将+=转换为

c = c + i;

编译为

c = new StringBuilder().append(c).append(i).toString();

StringBuilder 对所有原始类型都有 append 重载。