区别
在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象运行被销毁;而StringBuilder和 StringBuffer 类是可变的。
从JDK1.5开始,Java增加了一个新的字符串操作类:StringBuilder类。实际上,StringBuilder 和 StringBuffer 功能基本相似,方法也差不多。
StringBuilder和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的,并不能同步访问。
StringBuilder跟StringBuffer相比速度占优势,所以多数情况下建议使用 StringBuilder 类。如果程序开发过程中要求线程安全的情况下,就必须使用 StringBuffer 类。
总结
- String 是 Java 中基础且重要的类,是不可变字符串。因为它的不可变性,所以拼接字符串的时候会产生很多没有用的中间对象,频繁的进行这样的操作会对性能产生影响。
- StringBuffer 就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类。它提供了 append 和 add 方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列。
- StringBuilder 是 JDK1.5 发布的,在很多情况下我们的字符串拼接操作不需要线程安全,所以就可以用 StringBuilder,这样速度上比较有优势 。它和 StringBuffer 本质上没什么区别。
线程安全上:
StringBuffer是线程安全的;
StringBuilder是线程不安全的。