String,StringBuffer,StringBuilder区别
1、类型区别
String 是字符串常量
StringBuffer是字符串变量
StringBuilder是字符串变量
2、运行速度
String < StringBuffer < StringBuilder
原因:String是字符串常量,并且String类型不是基本类型,实际可以看做是一个对象,在拼接的时候在会不停的创建对象。所以String的运行效率相对于另外的两个低。
String a = "123" String b = "123" //a 和 b 只是值相同,地址不同
String的equals()被重写
3、线程安全
StringBuilder:线程非安全的 StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。
原因:
StringBuilder中的append方法没有使用synchronized关键字,StringBuffer的append方法使用了synchronized关键字。
4. 对于三者使用的总结:
- 单线程操作字符串缓冲区 下操作大量数据用StringBuilder
- 多线程操作字符串缓冲区 下操作大量数据用StringBuffer
- 如果要操作少量的数据用String
纸上得来终觉浅,绝知此事要躬行。