String,StringBuffer,StringBuilder区别

Posted ☆叙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String,StringBuffer,StringBuilder区别相关的知识,希望对你有一定的参考价值。

String,StringBuffer,StringBuilder

当对String类型的字符串进行修改时, 每次都相当于生成一个新的String对象,
举个例子
String a = “I”;
当我们想要实现“I am a student”时, 即 a = a + “am” + “a” + “student”;

系统会重新在堆内存中开辟三个位置分别用来存储"am"、“a”、“student”,然后再开辟一个位置来存放最后的结果,指针再指向这个堆内存地址, 再调用a的时候,,就是我们想要的结果,但是从这个例子中我们可以发现,系统一共开辟了五次堆内存空间, 只使用到了最后一个, 造成了很大的浪费,当内存中无引用对象多了后,,JVM的 GC(垃圾回收机制) 就会开始工作,会使的系统运行速度变慢。
为了避免这种问题,在jdk1.5版本中引入了 StringBuilder 以及 StringBuffer ,这两种类型的对象被修改时不会开辟新的空间(是可变的),因此不会造成上面的那种问题。
StringBuilder(线程不安全):所有的公开方法无synchronized修饰,适合单线程操作。
StringBuffer(线程安全):所有的公开方法使用了 synchronized(同步锁) 进行修饰,当多个线程访问synchronized代码块时,同一时刻只能有一个线程得到执行,其它线程会被阻塞,必须等这个线程执行完成后,其它线程才能执行。因此是StringBuffer是线程安全的,但相应的因为加了同步锁,所以执行效率比StringBuilder低,适合多线程操作。

以上是关于String,StringBuffer,StringBuilder区别的主要内容,如果未能解决你的问题,请参考以下文章

String,StringBuffer与StringBuilder的区别

(转)String,StringBuffer与StringBuilder的区别

重温java中的String,StringBuffer,StringBuilder类

Java常用类--String类(StringBuilder 和 StringBuffer)介绍

StringBuffer和StringBuilder类

StringBuffer的替换功能