String,StringBuffer,StringBuilder的区别

针对String,StringBuffer,StringBuilder的区别可以从四个方面来回答:

  1. 可变性:String内部的value值是经过final关键字修饰的,所以它是一个不可变的类,所以每一次修改String的值时,相当于重新创建一个String对象;而StringBuffer和StringBuilder是可变类,字符串的变更不会产生新的对象。
  2. 线程的安全性:因为String是个不可变的类,所以它是线程安全的;而StringBuffer里面的每个操作方法都用了一个synchronized一个同步关键字修饰,所以它也是线程安全的;而StringBuilder不是线程安全的。所以在多线程环境下对字符串进行操作时候,应该要使用StringBuffer。
  3. 性能方面:String是性能最低的,因为不可变,意味着做字符串拼接或者修改的时候都要重新创建String对象以及分配内存。其次StringBuffer性能要比String好一些,因为它的可变性意味着在字符串拼接和修改的时候不用去创建新的对象可以直接被修改。最后StringBuilder的性能最好,因为StringBufffer加了同步锁,加锁势必会影响性能。
  4. 存储方面:String存储在字符串常量池里面,而StringBuffer,StringBuilder是存储在堆内存空间的。

补充:StringBuffer,StringBuilder都是派生自AbstractStringBuilder这个抽象类。