string、stringBuffer、stringBuilder三者的区别是什么?
string 类中使用字符数组保存字符串 ,private final char value[] 被final修饰,所以string对象是不可变的,每次操作都是产生一个新的数组,指针指向新的数组
StringBuilder 与 StringBuffer 都继承自AbstractStringBuilder 也是只是用字符数组保存字符串 插入[] 这两种对象都是可变的,是在原有的对象上进行操作,如果经常修改,建议使用
线程安全性
String中的对象是不可变的,所以是线程安全的
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的
StringBuilder 并没有对方法进行加锁,所以是线程不安全的
三者在性能方面的比较:StringBuilder > StringBuffer > String
相同情况下使用StringBuilder 相比使用 StringBuffer 能够获得10%-15%左右的的性能提升,但却要冒着多线程不安全的风险,
如果要操作少量的数据用 String
单线程操作字符串缓冲区下操作大量数据用 StringBuilder
多线程操作字符串缓冲区下操作大量数据用 StringBuffer
线程不安全性能更高,所以我们在开发中优先使用stringBuilder
在开发的过程中我们一般用做字符的拼接问题,stringBuilder.append(),我们大多数时候是在方法内使用的,方法是独立的,stringBuilder作为局部变量,每个线程都访问各自的stringBuilder,这种情况并不会构成多线程的访问,所有使用stringbuilder最好