字符串的原理
- 人工智能
- 2025-09-17 07:30:02

目录
1.字符串储存的内存原理
2.== 号比较的到底是什么?
3.字符串拼接的底层原理
4.StringBulider提高效率原理图
5.StringBuilder 源码分析
1.字符串储存的内存原理
直接赋值会复用字符串常池中的
new出来不会复用,而是开辟一个新的空间
2.== 号比较的到底是什么?基本戴数据类型比较数据值
引用数据类型比较地址值
3.字符串拼接的底层原理第一类:没有变量参与
字符串直接相加,编译之后就是拼接之后的结果了,会复用串池中的字符串
第二类:有变量参与
会创建新的字符串,浪费内存
结论:如果很多字符串变量拼接,不要直接+。在底层会创建多个对象,浪费时间,浪费性能
4.StringBulider提高效率原理图所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存
字符串拼接的时候,如果有变量:
JDK8以前:系统底层会创建一个StringBuilder对象,然后再调用其append方法完成拼接,
拼接后,再调用tostring 方法转换为String类型,而toString方法 的底层直接new 了一个字符串对象
JDK8版本:系统会预估要字符串拼接之后的大小,把拼接的内容都放在数组中,此时也是产生一个新的字符串
5.StringBuilder 源码分析默认创建一个长度为16的字节数组
添加的长度小于16,直接存
添加的内容大于16会扩容(原来的容量* 2 +2)
如果扩容长度还不够,以实际长度为准
public class w{ public static void main(String[] args) { //容量:最多装多少 //长度:已经装了多少 StringBuilder sb = new StringBuilder(); System.out.println(sb.capacity()); System.out.println(sb.length()); sb.append("abc"); System.out.println(sb.capacity()); System.out.println(sb.length()); } }运行结果
16 0 16 3
上一篇
130.被围绕的区域(BFS)