String是不可变字符串。这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优

StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 

StringBuilder也是可变类,但是是非线程安全的操作类。

String StringBuffer StringBuilder
不可变 可变 可变
  线程安全 线程不安全
  多线程 单线程

举个栗子:

你母亲让你给她拿个苹果,过一会让你又拿了个梨........

String就相当于,用一个盘子(在内存种开辟一个空间)装苹果,过一会又用一个新盘子(又开辟了一块空间)装了梨。所以现在就使用了两个内存空间。

而StringBuffer就是,我用一个盘子给你装苹果,过一会我继续用这个盘子装梨。

而StringBulider就是,我虽然是同一个盘子装的,省了空间。但是我为了追求速度。无法保证安全。

对于三者的使用场景建议:

对于三者使用的总结: 1.如果要操作少量的数据用 = String
           2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
           3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

 

如果有什么不恰当的地方请评论或私信。谢谢。

posted on 2020-09-10 11:24  秃头小施主  阅读(178)  评论(0)    收藏  举报