'a'是char型,"abc"是String字符串,
两者拼接输出会将char型转换成String字符串,输出
“+”是被内置在Java语言中的,它具备两种功能:连接运算符和算术加法运算符。
Java为了应对不同类型的+运行,它在编译时,实际上会进行类型转换,这些类型转换都是Java内置好的(这就是为什么+号能支持各种基本类型相加的原因)。
1. 算术加法运算符:
比如int + byte,对于位数小于int的,都会转为int进行计算,因此他们实际上是进行int + int的运算。
再比如byte + char,(byte占一个字节,char占两个字节,int占四个字节),运算同上(这也是为什么char与他们相加时,输出的结果为int的原因)。
byte b = 0b0000_0011; // 3
int i = 10;
char c = 0b1111_1111;
System.out.println(b + i); // 13
System.out.println(b + c); // 258
System.out.println(i + c); // 265
2. 连接运算符:
再说char + String的运算,String的底层实际上是char[],很明显他们既不能互相转型,也无法进行算术运算。
当然,Java 语言为字符串连 ( + ) 以及将其他对象转换为字符串提供了特殊支持。字符串连接是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的,基本类型会先通过装箱变为对象,然后再调用toString方法。
因此 String + Object,他们实际上的操作为 StringBuilder.append(String.toSting).append(Object.toSting())
byte b = 0b0000_0011; // 3
int i = 10;
char c = 0b1111_1111;
String s = "str";
Object o = new Object();
System.out.println(b + s); // 3str
System.out.println(i + s); // 10str
System.out.println(c + s); // ÿstr
System.out.println(o + s); // java.lang.Object@78308db1str
参考:https://stackoverflow.com/questions/5464330/why-does-work-with-strings-in-java