干货 String、StringBuffer、StringBuilder的用法与区别



关于String、StringBuffer、StringBuilder博主之前总是有很多疑惑,看了一定的资料之后,博主决定写篇博一起来捋一捋,有什么不当之处请见谅

1.   String

String是一个字符串常量,是不可变的,只能进行一次赋值,赋值之后不可改变(那些改变操作实际上都是生成了一个新的String)

适用于变动小的数据

2.   StringBuffer

与String不同,StringBuffer是一个字符串变量,StringBuffer对于线程是安全的,适用于字符串操作多,涉及多线程的时候

StringBuffer常用append和insert方法,append用于将特定的字符串添加到缓冲区末端,insert用于在指定的位置添加字符。例如定义一个str=“world”调用str.append(“aa”)会使字符缓冲区包含“worldaa”,调用str.insert(2,“aa”)会使字符缓冲区包含“woaarld”。

3.   StringBuilder

StringBuilder也是一个字符串变量,其大部分用法与StringBuffer相同,但其对于线程是不安全的。适用于字符串操作多,不涉及多线程的时候。

其构造方法如下:

构造方法

描述

StringBuilder()

创建一个容量为16StringBuilder对象(16个空元素)

StringBuilder(CharSequence cs)

创建一个包含csStringBuilder对象,末尾附加16个空元素

StringBuilder(int initCapacity)

创建一个容量为initCapacityStringBuilder对象

StringBuilder(String s)

创建一个包含sStringBuilder对象,末尾附加16个空元素

 

在大部分情况下,StringBuilder > StringBuffer。这主要是由于前者不需要考虑线程安全。

 

4. 使用策略

上文已经提到了三者的使用,这里总结一下:

- String:字符串相加操作少、改动少
-StringBuffer
:字符串操作较多,涉及多线程; 
-StringBuilder 
:字符串操作较多,不涉及多线程。

 

这里需要强调的一点是不要使用String类的”+”来进行频繁的拼接,因为那样性能极差,应该使用StringBufferStringBuilder类,这样能够优化我们的代码

 

当然在一些特别的情况下String并不比StringBuffer慢,例如:

String str1=Hello+world”;

StringBuffer str2=new StringBuffer(“Hello”).append(“world”);

这是因为Java Compiler里,自动做了如下转换:

String str1=Helloworld;

但要注意的是,如果拼接的字符串来自另外的String对象的话,Java Compiler就不会自动转换了,速度也就没那么快了,例如:

String str1=Hello;

String str2=world;

String str3=str1+str2;

 

最后附上这三者的可变性和线程安全表:

 

-

String

StringBuffer

StringBuilder

可变性

No(不可变)

Yes(可变)

Yes(可变)

线程安全

Yes

Yes

No

 

 

 



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值