Java中String、StringBuilder、StringBuffer的区别

写Java代码时经常会碰到对字符串的各种操作,Java提供了三个字符串类型String、StringBuilder和StringBuffer,这三者之间有很大的区别,在不同情况下正确使用适当的类型是十分重要的,下面就来分析一下每种类型各自的作用和不同之处。

1、首先说String,这是大家最常用的字符串类型,通常大家都会这样用:

String str = "zhangsan";

或者

String str = new String("zhangsan");

之后再在适当的地方调用这个str变量,也可以调用String类中提供的charAt()、subString()、equals()等方法进行一系列的操作,但是当我们需要对这个字符串进行修改的时候就不是那么容易了,因为String创建的是静态字符串,通常可以用

str = str+"abc";

这样的语句来对字符串进行修改,可是这段语句执行后JVM是怎么工作的呢?JVM会重新创建一个String类型的名为str的变量,将原先的zhangsan和abc连起来初始化这个新创建的字符串,至于原来的字符串则会被垃圾回收机制给回收掉。这种方法的效率十分低下,那么怎么来动态改变字符串的内容呢?这就要用到StringBuilder和StringBuffer。

2、StringBuilder

StringBuilder是一个动态字符串类型,当我们要执行上述操作时,只需要

StringBuilder str = new StringBuilder();

str.append("zhangsan");

str.append("abc");

就可以完成字符串的修改操作,而不需要重新创建一个新的StringBuilder对象了。

3、StringBuffer

StringBuffer大体上来说是和StringBuilder差不多的,也支持字符串的动态修改,不同的是StringBuffer是线程安全的,也就是说当要对字符串进行大量并发操作时,StringBuffer可以保证操作的结果不出差错,因为StringBuffer里的许多方法是用synchronized关键字修饰的同步方法。

所以就操作效率来看,StringBuilder > StringBuffer > String,String适用于对于字符串修改操作较少的情况,而另外两种分别适用于需要并行处理和不需要并行处理时,对字符串的大量修改操作。



猜你喜欢

转载自blog.csdn.net/u012198209/article/details/79852002