0%

字符串相关类的底层原理

字符串相关类的底层原理:

1.字符串存储的内存原理

​ 直接赋值会复用字符串常量池

​ new出来不会复用,而是开辟一个新空间

2.==号比较的到底是什么?

​ 基本数据类型比较数据值

​ 引用数据类型比较地址值

3.字符串拼接的底层原理

等号右边没有变量参与:

如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串次中的字符串。

等号右边有变量参与:

JDK8以前:系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接。拼接后,再调用其toString方法转换为String类型,而toString方法的底层是直接new了一个字符串对象。

JDK8版本:系统会预估字符串拼接后的总大小,把要拼接的内容都放在数组中,此时也是产生一个新的字符串。

4.StringBuilder提高效率原理图

所有要拼接的内容都会往String Builder中放,不会创建很多无用的空间,节约内存。

5.StringBuilder源码分析

默认创建一个长度为16的字节数组,添加的内容长度小于16,直接存,添加的内容大于16会扩容(原来的内容*2+2),如果扩容之后还不够,以实际长度为准。