String,Stringbuilder,Stringbuffer的区别

  • Post author:
  • Post category:其他


1.String

String被称为字符串常量,常量意味着他是不可变量。 String是把数据存放在了常量池当中,因为所有的String,默认都是以常量形式保存。

在String的源码可以看见,String的底层是数组,但是它被final修饰,表示String只能赋值一次,不可再更改。进行字符串拼接,会产生许多无用的对象,导致不断的占用内存。

2.StringBuilder

StringBuilder作为一种可变字符串类型,它和String的不同在于StringBuilder可以对字符串进行,拼接、反序、替换、删减、插入等操作,进行操作时每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象。相比较其他数据类型,他可能更加类似于数组。当对于String类型的数据进行拼接的时候,底层调用的是StringBuilder对象,分别调用了append方法和ToString方法。

3.StringBuffer

StringBuffer和StringBuilder很相似,它们都是可变的字符串。通过查看源码可知,它们的继承的类,实现的接口都是一样的。这两个类在实现上不同的地方基本有两点:

1.StringBuffer在很多方法上加上了关键字synchronized,而StringBuilder没有。

2.StringBuffer新增了一个变量toStringCache,变量toStringCache是toString返回的最后一个值的缓存,每当修改StringBuffer时清除。


Java StringBuffer 和 StringBuilder 类 | 菜鸟教程 (runoob.com)

4.三者的比较


5.应用场景


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

2.多线程操作字符串缓冲区下操作大量数据用 StringBuffer;

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


6.性能测试


1.分别使用

String和StringBuilder、StringBuffer进行一个简单性能测试,对字符串进行拼接,测试循环拼接100000次。

下面是测试结果:

从最后的结果来看,在字符拼接上String和StringBuffer,StringBuilder完全不是一个量级的,所以在进行大量字符串拼接的时候采用StringBuffer和StringBuilder是最好的。



版权声明:本文为Wdoing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。