什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?

tring一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。





而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。





因此我们得出结论:当需要进行频繁修改字符串的操作时先建立StringBuffer类对象进行操作,


将最后结果转化成String类对象返回,这样效率会高很多。








当然是用stringbuffer好了,因为string指向的字符串本身是不变的,在执行+的时候,


实际上是将该string名字指向了另外一个字符串,这样在执行多次+的时候就会浪费资源.


而stringbuffer始终指向一个串,变的是串的内容.





String一旦赋值或实例化后就不可更改,如果赋予新值将会重新开辟内存地址进行存储。 



     而StringBuffer类使用append和insert等方法改变字符串值时只是在原有对象存储的内存地址上进行连续操作,减少了资源的开销。 



     因此我们得出结论:当需要进行频繁修改字符串的操作时先建立StringBuffer类对象进行操作,将最后结果转化成String类对象返回,这样效率会高很多。


 

     关于String与StringBuffer的使用在各大网站都有说明了,因为String对象一旦创建是不能改变的,总的来说StringBuffer比String在效率上的优越的。

 

     如果要对一个字符串进行多次连接操作,大多数情况下,初学者会使用“+”,而程序员会选用StringBuffer的append方法。

 

    不过,这里还要介绍一种StringBuilder。在Thinking in Java书中也着重推荐了这个类,这个类在有些时候比StringBuffer运行更快。

 

    首先是要区别他们两个:

        StringBuffer是线程安全的

        StringBuilder是线程不安全的

   很明显,StringBuffer的系统开销要大,所以如果我们只有一个单线程,考虑速度的话,StringBuilder更好。

 

    那为什么我们很少见到StringBuilder呢?原因很简单,因为我们有时候很难确定我们创建的系统会不会是多线程的,如果考虑到以后扩展的可能性,则更难确定,所以我们更愿意使用StringBuffer,因为它是线程安全的,不用担心以后扩展。

 

PS:本文转载自某人的博文和百度知道






0
    原文作者:allen1883
    原文地址: https://blog.csdn.net/allen1883/article/details/50827384
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞