string、stringbuffer和stringbuilder的区别

1、可变与不可变

string类中使用字符数组保存字符串 如下就是, 因为有‘final’修饰符 所以string对象是不可变的

 private final char value[];

stringbuffer和stringbuilder都继承了abstractstringbuilder 类 ,在abstractstringbuilder中也是使用字符数组保存字符串,如下就是 可知这两个对象都是可变的。

char[] value;

2、线程安全

string对象是不可变的 可以理解为常量 因此线程安全

abstractstringbuilder 是stringbuilder和stringbuffer的公共父类 定义了一些字符串的基本操作 和一些公共方法

stringbuffer对方法加了同步锁 因此线程安全

stringbuilder没有对方法加同步锁 因此非线程安全

3、stringbuilder和stringbuffer的共同点

他俩有一个公共父类(抽象类)
抽象类与接口的唯一区别就是 抽象类可以定义一些子类共同的方法 子类只需要添加新的功能即可 不需要重写已经存在的方法

接口只是对方法的申明和常量的定义 。他俩都会调用抽象类中的方法如super.append

但stringbuffer在方法上加了synchronized关键字 进行同步

如果程序不是多线程 使用stringbuilder效率高于stringbuffer

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值