StringBuffer和StringBuilder

    xiaoxiao2021-03-25  63

    分析以下代码,共产生了多少个String对象

    /** * Created by wjz on 2017/3/12. */ public class StringTest { public static void main(String[] args) { String a = "a"; String b = "b"; String c = "c"; String d = "d"; String abcd = a + b + c + d; } } 一共产生了7个对象,"a","b","c","d","ab","abc","abcd"字符串,由以上的实例看出,通过String直接相加拼接字符串的效率很低,应该使用StringBuffer和StringBuilder类,他们是对String的一种补充,例如:

    /** * Created by wjz on 2017/3/12. */ public class StringTest { public static void main(String[] args) { String a = "a"; String b = "b"; String c = "c"; String d = "d"; StringBuffer sb = new StringBuffer(); sb.append(a); sb.append(b); sb.append(c); sb.append(d); String abcd = sb.toString(); //toString方法得到sb的值 System.out.println(abcd); } } 那么StringBuffer和StringBuilder的区别是什么呢?我们看源码:

    StringBuffer中的toString方法如下:

    @Override public synchronized String toString() { if (toStringCache == null) { toStringCache = Arrays.copyOfRange(value, 0, count); } return new String(toStringCache, true); } 使用了synchronized关键字,它是线程安全的;

    StringBuilder中的toString方法如下:

    @Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); } 它不是线程安全的,所以当涉及到线程安全的问题时,应该使用StringBuffer。

    转载请注明原文地址: https://ju.6miu.com/read-33340.html

    最新回复(0)