欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 字符串的原理

字符串的原理

2025/3/10 22:34:58 来源:https://blog.csdn.net/2402_87433209/article/details/145971018  浏览:    关键词:字符串的原理

目录

 

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

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词