Java关于字符串拼接和加操作

img


为什么这个拼接 不是97abc 而是aabc 求细细讲下为啥 这块有些不太理解

'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