栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String、StringBuffer、StringBuilder 的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String、StringBuffer、StringBuilder 的区别

(1)三者在执行速度方面的比较:StringBuilder > StringBuffer  >  String

(2)String <(StringBuffer,StringBuilder)的原因

String:字符串常量;StringBuffer:字符串变量;StringBuilder:字符串变量

从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对照这段代码理解这句话:

String s = "abcd";

s = s+”e”;

System.out.print(s);// result : abcde

首先会先创建出abcd对象,然后经过编译的优化,字符串的拼接会变成stringbuilder的形式进行拼接,这时候会创建一个stringbuilder对象,然后在拼接时,常量池中还会创建一个e对象。在jdk1.7之前是没有使用stringbuilder进行优化的,字符串拼接的效率比较低,但是编译优化并不是总会有效的,这种简单代码编译器可以给我们做好优化,但是复杂代码编译器也是做不到完美的优化,所以在做字符串拼接的时候,尽量还是使用stringbuilder

而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些额外的对象进行操作了,当然速度就快了。

一个特殊的例子:String str = “This is only a” + “ simple” + “test”;这时没有String对象的拼接所以没有创建新对象,速度比另外两个都快。

StringBuilder:线程非安全的

StringBuffer:线程安全的

当字符串缓冲区被多个线程使用时,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结:

1.如果要操作少量的数据用String

2.单线程操作字符串缓冲区下操作大量数据StringBuilder

3.多线程操作字符串缓冲区操作大量数据 StringBuffer

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号