String是不可变字符串。这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
StringBuilder也是可变类,但是是非线程安全的操作类。
String | StringBuffer | StringBuilder |
不可变 | 可变 | 可变 |
线程安全 | 线程不安全 | |
多线程 | 单线程 |
举个栗子:
你母亲让你给她拿个苹果,过一会让你又拿了个梨........
String就相当于,用一个盘子(在内存种开辟一个空间)装苹果,过一会又用一个新盘子(又开辟了一块空间)装了梨。所以现在就使用了两个内存空间。
而StringBuffer就是,我用一个盘子给你装苹果,过一会我继续用这个盘子装梨。
而StringBulider就是,我虽然是同一个盘子装的,省了空间。但是我为了追求速度。无法保证安全。
对于三者的使用场景建议:
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
如果有什么不恰当的地方请评论或私信。谢谢。
String、StringBuffer、StringBulider
原文:https://www.cnblogs.com/dxj315/p/13644664.html