字符串相关类的底层原理:
1.字符串存储的内存原理
直接赋值会复用字符串常量池
new出来不会复用,而是开辟一个新空间
2.==号比较的到底是什么?
基本数据类型比较数据值
引用数据类型比较地址值
3.字符串拼接的底层原理
等号右边没有变量参与:
如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串次中的字符串。
等号右边有变量参与:
JDK8以前:系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接。拼接后,再调用其toString方法转换为String类型,而toString方法的底层是直接new了一个字符串对象。
JDK8版本:系统会预估字符串拼接后的总大小,把要拼接的内容都放在数组中,此时也是产生一个新的字符串。
4.StringBuilder提高效率原理图
所有要拼接的内容都会往String Builder中放,不会创建很多无用的空间,节约内存。
5.StringBuilder源码分析
默认创建一个长度为16的字节数组,添加的内容长度小于16,直接存,添加的内容大于16会扩容(原来的内容*2+2),如果扩容之后还不够,以实际长度为准。