Java StringBuffer与StringBuilder
StringBuffer测试代码示例
public class TestStringBuffer { public static void main(String[] args) { String str1 = "I"; String str2 = "love"; String str3 = str1+str2+"China"; /* * str3的创建采用了 变量连接常量的方式,最终会产生5个对象 * 造成存在大量垃圾对象,浪费资源且效率低下 */ System.out.println(str3); //这种方式只会创建一个对象,因为使用常量连接,在编译器就可以被确定 String str4 = "I"+"love"+"China"; /* * 因为上述的创建字符串的方式存在缺陷, * 所以有了 StringBuffer类,解决了字符串拼接时 * 产生大量垃圾对象的问题. * StringBuffer的内部实现采用的是字符数组,初始默认长度为16, * 字符串长度超过16时,扩充后长度=原数组长度*2+2 * * StringBuffer是线程安全的,性能会受到一定影响 */ StringBuffer sb = new StringBuffer(); sb.append("I").append("love").append("China"); } }
StringBuilder:
一个可变的字符序列,此类提供了与StringBuffer兼容的API(两个类的方法几乎一样,只是StringBuilder的方法少了synchronized关键字修饰),被设计成StringBuffer的简易替换。
当字符串缓冲区被单个线程使用的时候,建议优先使用该类。因为在大多数实现中,它比StringBuffer要快。
String s=null; for(int i=0;i<5;i++) { s +=i; //每次循环都会创建一个StringBuilder实现字符串拼接,性能低。 //最好手动创建StringBuilder来拼接,效率较高,且不换产生过多垃圾对象 }
StringBuffer与StringBuilder的区别:
(1)StringBuffer是线程安全的,性能低,适合在多线程的情况下使用
(2)StringBuildier不是线程安全的,性能高,适合在单线程的情况下使用,这种情况是占大多数的。
本文来自博客园,作者:藤原豆腐渣渣,转载请注明原文链接:https://www.cnblogs.com/javafufeng/p/16303735.html