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最好

 

posted @ 2021-03-04 15:02  余一洋  阅读(253)  评论(0编辑  收藏  举报