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是线程安全的,关于什么是线程安全,我们暂不解释,我们只需记住,线程安全对应的效率就低,线程不安全对应的效率也就高
可以想象成上厕所,有门和没门,有门肯定就更安全,但是也阻碍了我们上厕所的时间。没门我们直接就可以上厕所,但是肯定没那么安全