String、StringBuffer、StringBuilder 区别总结
线程安全来说:
String(是final修饰类)和StringBuffer(StringBuffer的方法都是带有synchronized关键字)都安全, 而StringBuilder因为没有synchronized关键字所以不安全。
执行效率来说:
String最慢,StringBuffer次之,StringBuilder最快。因为,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉
底层操作来说:
String 当将一个字符串常量赋给一个String对象时(例如String str1 = “dashu”),实际上是 “dashu” 这个常量是放在常量池里,String对象则是指向了"dashu"所在的地址。String 不存在扩容。字符串拼接,截取,都会生成一个新的对象
StringBuilder 内部维护可变长度char[] , 初始化数组容量为16,存在扩容
StringBuffer 类内部维护可变长度char[],基本上与StringBuilder一致,初始化数组容量16,也存在扩容,但其为线程安全的字符串操作类,大部分方法都采用了Synchronized关键字修改
小总结:
1.如果要操作少量的数据用 : String 因为它是线程安全的。又因为少量数据注定三者速度差别会很小。
2.单线程操作字符串缓冲区 下操作大量数据:本来也可以选String类的,但是String对于大量数据来说的话,会频繁创建对象和GC,速度会很慢。StringBuilder 是单线程不安全的,所以选StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据:大数量,注定String不适合,因为它太慢,太耗资源,StringBuilder又线程不安全,所以也不适合,所以,选StringBuffer。