字符串拼接的底层原理
1.等式右边无变量
String s = "a" + "b" + "c";
System.Out.Println(s);
代码在编译过程中就会进行拼接,因此不需要单独开辟空间。
2.等式右边有变量
首先会创建一个StringBuilder对象,然后调用append()方法进行拼接,再将新的对象转为String对象,因此一次拼接需要new两次
public static void main(String[] args) {
String s1 = "a";
String s2 = s1 + "b";
String s3 = s2 + "c";
System.out.println(s3);
}
原理图(jdk8以前的版本):
(jdk8版本):jdk8则采用了一种新的方式
public static void main(String[] args) {
String s1 = "a";
String s2 = s1 + "b";
String s3 = s2 + "c";
System.out.println(s3);
}
不会创建StringBuilder对象,而是对新的字符串长度进行估算,然后直接创建新的String对象,虽然只需要new一次,但是进行长度估算时也会消耗大量的时间,效率不高。