1.2 String 和 StringBuffer,StringBuilder 的区别是什么? String 为什么是不可变的?
String类使用final关键字字符数组保存字符串,所以String对象是不可变的,也可以理解为常量,线程安全。
AbstractStringBuilder是StringBuider和StringBuffer的公共父类,定义了一些字符串的基本操作,如append,insert,indexOf等公共方法,StringBuffer与StringBuilder的构造方法都是AbstractStringBuilder实现的,AbstractStringBuilder中也是使用字符数组保存字符串,但是没用final修饰,所以着两种对象是可变的
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以线程安全
StringBuilder没有对方法加同步锁,所以是非线程安全的
从性能上来讲
String<StringBuffer<StringBuilder
总结:
1.操作少量的数据就用String
2.单线程操作字符串缓冲区下操作大量数据时用StringBuilder
3.多线程操作字符串缓冲区下操作大量数据时用StringBuffer