String,StringBuilder,StringBuffer的区别

1.String

String中使用final char value[]来存储字符串,所以String字符串是不可变的

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];
    ...
    ...
}

2.StringBuffer

StringBuffer 继承自 AbstractStringBuilder 而与String不同的是,AbstractStringBuilder中使用char value[] 保存字符串,没有final修饰

 public final class StringBuffer 
    extends AbstractStringBuilder 
    implements java.io.Serializable, CharSequence {
    ...
    }


abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;
    ...
    }

3.StringBuilder

StringBuilder 和StringBuffer一样继承自AbstractStringBuilder,内部使用char value[]数组保存字符串。

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence {
    ...
    }

4.线程安全方面

String中使用final char value[]保存字符串可以认为是线程安全的。

StringBuffer中每一个方法都是用synchronize关键字进行了修饰,保证了线程安全,可被多个线程安全的使用。

StringBuilder没有对方法添加同步锁,所以是非线程安全的。

5.性能方面

String 每次对String进行改变都会生成一个新的对象,然后将指针指向新的String对象。

StringBuffer每次都会对StringBuffer对象本身进行操作,不会产生新的对象。

StringBuilder没有进行线程同步,性能自然会有提高,据说高不哪去。

6.使用场景总结

操作少量数据:String

多线程操作大量数据的字符串缓冲区:StringBuffer

单线程操作大量数据得字符串缓冲区:StringBuilder

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值