Java面试题目

假装没事ソ 提交于 2019-11-28 04:08:37

String、StringBuffer与StringBuilder的区别

 

 

String 字符串常量

StringBuffer 字符串变量(线程安全)

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

 

首先三者主要输在运行速度和线程安全这两位方面。
string:是一个java类,是一个字符串常量,声明是:public final ,所以final的话是改变不了的。字符串值改变不了,就只能在内存创建一个空间来保存新的字符串。所以一旦遇到复杂的操作,用string是多么低效率的事啊。

StringBuilder和StringBuffer有公共类AbstractStringBuilder(抽象类)。


1、执行速度上比较(快慢):stringbuilder>stringbuffer>string
原因(也就是变量和常量的关系):string为字符串常量,后两个是字符串变量,也就是说string对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。而不进行创建和回收,所以速度要比string快很多。


2、线程安全上比较:stringbuilder是线程不安全的,而stringbuffer是线程安全的。
原因:String:对象定义后,线程安全。
           stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中有很多可以带有synchronize关键字,所以可以保证线程是安全的。
           stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误。
建议:如果要进行操作的是多线程,那就使用stringbuffer,但在单线程的情况下,还是建议使用速度较快的stringbuilder。

 

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

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

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

StringBuffer 字符串变量(线程安全)

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

 

首先三者主要输在运行速度和线程安全这两位方面。
string:是一个java类,是一个字符串常量,声明是:public final ,所以final的话是改变不了的。字符串值改变不了,就只能在内存创建一个空间来保存新的字符串。所以一旦遇到复杂的操作,用string是多么低效率的事啊。

StringBuilder和StringBuffer有公共类AbstractStringBuilder(抽象类)。


1、执行速度上比较(快慢):stringbuilder>stringbuffer>string
原因(也就是变量和常量的关系):string为字符串常量,后两个是字符串变量,也就是说string对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。而不进行创建和回收,所以速度要比string快很多。


2、线程安全上比较:stringbuilder是线程不安全的,而stringbuffer是线程安全的。
原因:String:对象定义后,线程安全。
           stringbuffer对象在字符串缓冲区被多个线程使用时,stringbuffer中有很多可以带有synchronize关键字,所以可以保证线程是安全的。
           stringbuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误。
建议:如果要进行操作的是多线程,那就使用stringbuffer,但在单线程的情况下,还是建议使用速度较快的stringbuilder。

 

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!