String、StringBuilder、StringBuffer的区别

1.在执行速度方面: StringBuilder > StringBuffer > String

String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

用String+的方式,每循环一次,就会重新new一个StringBuffer对象,这样的内存消耗完全是不必要的

String str="abc";
System.out.println(str);
str=str+"de";
System.out.println(str);

 输出为"abc"和"abcde",从结果上看str变量的值被改变了,而实际上第一行创建一个String变量str,并赋值为"abc",到第三行时实则是又创建了一个String变量str,并将以前的str的值上加上"de",而之前的str将被JVM的GC垃圾回收器回收,所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

2.从线程安全方面: StringBuilder是线程不安全的,而StringBuffer是线程安全的

总结:

String:适用于少量的字符串操作的情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

原文地址:https://www.cnblogs.com/goodbye-lazy/p/10194822.html