String、StringBuffer与StringBuilder的区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

 

首先三者主要输在运行速度和线程安全这两位方面。
        string:是一个java类,是一个字符串常量,声明是:public final ,所以final的话是改变不了的。字符串值改变不了,就只能在内存创建一个空间来保存新的字符串。所以一旦遇到复杂的操作,用string是多么低效率的事啊。
        StringBuilderStringBuffer有公共类AbstractStringBuilder(抽象类)。
1、执行速度上比较(快慢):stringbuilder>stringbuffer>string
原因(也就是变量和常量的关系):string为字符串常量,后两个是字符串变量,也就是说string对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。而不进行创建和回收,所以速度要比string快很多。
2、线程安全上比较:stringbuilder是线程不安全的,而stringbuffer是线程安全的。
原因:String:对象定义后,线程安全。
           stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中有很多可以带有synchronize关键字,所以可以保证线程是安全的。
           stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误。
建议:如果要进行操作的是多线程,那就使用stringbuffer,但在单线程的情况下,还是建议使用速度较快的stringbuilder。

 

总结:  String:适用于少量的字符串操作的情况

                  StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

                  StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

posted @ 2018-04-16 13:51  毫无代价  阅读(1254)  评论(0编辑  收藏  举报