StringBuffer 和 StringBuilder可以定义字符串
在库函数上,这两个有些方法是String本身没有的,例如字符串反转,删除指定范围的数据,插入数据等操作
学习StringBuffer 和 StringBuilder
利用StringBuffer 和 StringBuilder实现拼接
(StringBuffer 的所有函数都加了关键字synchronized,建议多使用StringBuffer)
学习StringBuffer 和 StringBuilder
在str += “hello”,这个代码实现拼接的时候,由反汇编代码可以看到在实现拼接的时候StringBuilder出现
学习StringBuffer 和 StringBuilder
所以相当于如下代码
学习StringBuffer 和 StringBuilder
由此可知:String通过加号“+"进行拼接的时候,底层被优化为StringBuilder(单线程)

相比于StringBuffer,StringBuilder的效率是较高的,因为StringBuffer中线程安全相当于加了一把锁,但是加锁和释放锁都需要消耗资源,所以StringBuffer效率较低。

我们也可以对利用for循环实现拼接的代码进行优化,如下:
学习StringBuffer 和 StringBuilder

那么String, StringBuffer ,StringBuilder三者的区别是什么呢?

String, StringBuilder 适用于单线程,StringBuffer适用于双线程,而且String的拼接底层会被优化为StringBuilder。

String的内容不可修改,StringBuffer与StringBuilder的内容可以修改,因为append返回的是当前对象的引用,所以每次的修改都是在当前对象进行。

注意:String和StringBuffer不能直接转换

如果要想互相转换,可以采用如下原则:

1.String变为StringBuffer:利用StringBuffer的构造方法或append()方法
学习StringBuffer 和 StringBuilder

2.StringBuffer变为String:调用toString()方法

学习StringBuffer 和 StringBuilder

相关文章: