简而言之:
三者区别主要是运行速度和线程安全两个方面。
1 运行速度比较:StringBuilder > StringBuffer > String
具体分析:
(1) String
String本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的同名的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响。
(2) StringBuilder和StringBuffer
而StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能
如何选择
当程序中需要大量的对某个字符串进行操作时,应该考虑应用StringBuilder类处理该字符串,其设计目的就是针对大量string操作的一种改进办法,避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用string类即可。
2 在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的
如何选择
单线程,选择速度不较快的StringBuilder;多线程,使用StringBuffer
3 总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下,对字符串进行大量操作的情况
StringBuffer:适用多线程下,对字符串进行大量操作的情况
扩展
三者继承关系
参考:
https://www.cnblogs.com/mrxy/p/8057657.html
https://www.cnblogs.com/su-feng/p/6659064.html