String,Stringbuilder,Stringbuffer的区别

1.String

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

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

String,Stringbuilder,Stringbuffer的区别_第1张图片

 2.StringBuilder

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

3.StringBuffer

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

1.StringBuffer在很多方法上加上了关键字synchronized,而StringBuilder没有。
2.StringBuffer新增了一个变量toStringCache,变量toStringCache是toString返回的最后一个值的缓存,每当修改StringBuffer时清除。
String,Stringbuilder,Stringbuffer的区别_第2张图片

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

 4.三者的比较

String,Stringbuilder,Stringbuffer的区别_第3张图片5.应用场景

1.如果要操作少量的数据用 String;
2.多线程操作字符串缓冲区下操作大量数据用 StringBuffer;
3.单线程操作字符串缓冲区下操作大量数据用 StringBuilder。

6.性能测试

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

下面是测试结果:

String,Stringbuilder,Stringbuffer的区别_第4张图片

String,Stringbuilder,Stringbuffer的区别_第5张图片 

 String,Stringbuilder,Stringbuffer的区别_第6张图片

 String,Stringbuilder,Stringbuffer的区别_第7张图片

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

你可能感兴趣的:(java,开发语言)