主页 > 人工智能  > 

字符串的原理

字符串的原理

目录

 

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

 

 

标签:

字符串的原理由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“字符串的原理