String、StringBuffer、StringBuilder
- 总结
- 为什么StringBuffer与StringBuilder执行效率高
- StringBuffer与StringBuilder的线程安全问题
总结
1.String为固定长度的字符串,StringBuilder和StringBuffer为变长字符串;
2.StringBuffer是线程安全的,StringBuilder是非线程安全的;
3.StringBuffer和StringBuilder的默认初始容量是16,可以提前预估好字符串的长度,进一步减少扩容带来的额外开销。
4.StringBufffer是线程安全的,但性能低于StringBuilder
为什么StringBuffer与StringBuilder执行效率高
String在java中是不可变长的,一旦初始化就不能修改长度,简单的字符串拼接其实是创建新的String对象,再把拼接后的内容赋值给新的对象,在频繁修改的情况下会频繁创建对象,而StringBuilder则不会,从头到尾只有一个实例对象。
StringBuffer与StringBuilder的线程安全问题
StringBuffer:线程安全;
StringBuilder:线程不安全。
因为StringBuffer的所有公开方法都是synchronized修饰的,而StringBuilder并没有synchronized修饰。
StringBuilder和StringBuffer的性能问题
StringBuffer是线程安全的,它的所有公开方法都是同步的,而StringBuilder 是没有对方法加锁同步的,因此StringBuilder的性能要大于StringBuffer。