StringBuffer和StringBuilder

本文分析了一段字符串拼接代码,解释了如何通过使用StringBuffer和StringBuilder提高效率。探讨了这两种类之间的区别,特别是在线程安全性方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析以下代码,共产生了多少个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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值