字符串相关的底层原理

88 阅读1分钟

字符串拼接的底层原理

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以前的版本): image.png

(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一次,但是进行长度估算时也会消耗大量的时间,效率不高。