Java中我们常用来修饰字符串的三个定义字符串的是String,StringBuilder,StringBuffer。
一、String
作为程序员最常用的String,我们经常运用String来定义字符串。
例如局部变量,全局变量、类的属性等,我们都会用到String。
查看Java API 底层的String定义为final char value[].
即不可类,任何对String的改变都会生成一个新的变量。
二、StringBuilder
StringBuilder,我们直接看底层
StringBuilder 的底层定义为 char[] value,即StringBuilder 是一个可变类。
对其所指带的变量的改变都不会产生新的变量。
三、StringBuffer
通过底层查看 我们发现StringBuffer底层也是char[] value。
那StringBuffer和StringBuilder我们可以确定都是一个可变类,即其所指带的变量的改变都不会产生新的变量。
那么疑问来了 StringBuilder和StringBuffer之间的区别呢?
四、StringBuilder和StringBuffer之间的区别。
StringBuilder和StringBuffer之间的区别,我们可以参照HashTable和HashMap。
我们知道HashTable是线程安全的,而HashMap不是。在单线程下,我们更多的使用的是HashMap,因为HashMap的效率更高。StringBuffer和Stringbuilder和他们的原理和操作基本相同。追查底层我们会发现StringBuffer的append用重载加入了synchronized方法,
而StringBuilder则没有
使用场景:
StringBuffer是线程安全的,适合在多线程的环境中使用。
而StringBuilder不是线程安全的,不支持并发,但效率较高,不适合在多线程环境中使用。
新引入的StringBuilder不是线程安全的,但其在单线程中的使用效率较高。
本文也阅读了一些CSDN大牛的描述,包括测试StringBuilder和StringBuffer的效率问题,以及Stringbuffer和StringBuilder的一些常见接口。经过自己的阅读,还是配合源码才能理解。