StringBuilder原理及StringBuffer

1.StringBuilder的原理

StringBuilder是用来干什么的?为什么我们要学习StringBuilder?字符串拼接明明String也可以实现

答:StringBuilder可以大幅提示字符串拼接的效率,这就是我们学习它的理由

具体原因,我们在内存图中进行讲解 如图

string拼接


主方法进栈,然后执行对象,字符串常量池进行创建,

当碰到s2时,有“+”,系统就会自动生成StringBuilder,然后将字符串进行拼接,接着再自动调用toString方法,将类型改为String,最后才把地址给s2.

s3也是如此,根据内存图我们就会发现,如果使用字符串进行拼接操作,每拼接一次,内存中就要产生2个对象(StringBuilder、ToString后),对象的创建和销毁都需要时间,所以string拼接很浪费时间

完整流程:https://kdocs.cn/l/cnfY68qsWVNS?linkname=150995474

stringBuilder拼接

stringBuilder的内存空间是由我们自己创建的,因此,每次的执行,系统都不会自动创建,而是调用我们自行创建的缓冲区空间

所以,这就是为什么stringBuilder在拼接方面的速度可以如此高效,在以后的拼接操作中,如果超过了5次的拼接,都建议使用StringBuilder来拼接

2.StringBuffer

StringBuilder与StringBuffer的使用一模一样,所以我们现在完全可以使用StringBUffer方法,但是它们两个之间也存在区别

1.StringBuilder是在JDK1.5开始才存在,StringBuffer则是在JDK1.0就存在

2.StringBuilder是线程不安全的,而StringBuffer是线程安全的,关于什么是线程安全,我们暂不解释,我们只需记住,线程安全对应的效率就低,线程不安全对应的效率也就高

可以想象成上厕所,有门和没门,有门肯定就更安全,但是也阻碍了我们上厕所的时间。没门我们直接就可以上厕所,但是肯定没那么安全

posted @ 2024-12-07 13:03  直実  阅读(13)  评论(0编辑  收藏  举报