String,StringBuilder,StringBuffer的区别

1.String,StringBuilder,StringBuffer本质

在java中,字符串的本至其实是字符组成的数组,反应在String,StringBuilder,StringBuffer类中就是value[]属性。通过jdk源码我们会发现

Stirng类的value[]是private final char value[]; 说明String是不可编辑字符序列。

StringBuffer与StringBuilder继承抽象类AbstractStringBuilder,其value[]属性没有final关键字修饰,所以其属性可以通过append()方法修改,是可变编辑序列


2.String,StringBuilder,StringBuffer效率

在效率方面StringBuilder > StringBuffer > String

举个最简单的字符串拼接的例子:

String str = "String测试";

StringBuilder sb =  new StringBuilder("SB测试");

for(int i=0;i<3;i++) {

    str+=i;

    sb.append(i);

}

String类运行的内存分析如下图:


从上图中我们不难发现,在整个程序的运行过程中,String一共新建了三个对象。

而StringBuilder因为是可变的,每调用一次append方法,都会返回一个this对象,即返回对象本身。故整个程序运行中,只存在一个StringBuilder对象。

综上,StringBuilder的效率>String的效率。

StringBuffer本质与StringBuilder差不多,只是StringBuffer中的方法加了synchronized关键字,所以StringBuffer是线程安全的,但是效率比StringBuilder低。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值