String
String表示的是Java中的字符串,String被创建后不可更改,查看源码可知String由final修饰。所以对String进行类似字符串拼接、截取操作实际上都是产生了新的对象。
StringBuffer
StringBuffer对象是一个可变字符串,当一个 StringBuffer 被创建以后,通过 StringBuffer 的一系列方法可以实现字符串的拼接、截取等操作。一旦通过 StringBuffer 生成了最终想要的字符串后,就可以调用其 toString 方法来生成一个新的字符串。
例如:
StringBuffer buffer = new StringBuffer("111");
buffer.append("123");
System.out.println(buffer);
StringBuffer是线程安全的,源码可以看到字符操作方法用了Synchronized修饰
StringBuilder
StrigBuilder与StringBuffer的主要区别是非线程安全的,String对象执行"+"等操作是通过隐式的创建StringBuilder,使用append()实现的。
三者性能比较
StringBuilder > StringBuffer > String
应用场景
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况