StringBuffer 和 StringBuilder区别简介

Java  小知识  2021年11月22日 pm7:16发布3年前 (2021)更新 91es.com站长
104 0 0

前言

StringBufferStringBuilder虽然经常用,但偶尔忘记他们之间的区别,这里简单整(摘)理(抄)一下,方便自己查阅。

PS:好记性不如烂笔头

正文

StringBuffer 和 StringBuilder都是可变的字符串,但他们两之前还是有不少的区别。

StringBuffer和StringBuilder的类结构

StringBuffer 和 StringBuilder区别简介

从上面可以看出,他们都继承AbstractStringBuilder,当具体使用起来就存在区别了。

StringBuffer和StringBuilder的区别

StringBuffer和StringBuilder存在如下几个区别:

1. 线程安全

StringBuffer 是线程安全的,其的方法中有synchronized 修饰。

StringBuilder 是线程不安全的。

因此,在安全方面,StringBuilder优秀。

2. 性能

接上面线程安全和线程不安全,由于带有锁(synchronized修饰),导致访问的方法都同步的,也就存在访问一个方法另一个方法就需要等着。

因此,在性能上,StringBuffer比StringBuilder差。

3. 缓冲区

StringBuffer 代码片段:

private transient char[] toStringCache;

@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

StringBuilder 代码片段:

@Override
public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

可以看出,StringBuffer每次获取toString都会直接使用缓存区的toStringCache值来构造一个字符串。

而StringBuilder则每次都需要复制一次字符数组,会再创建一个字符串。

缓存冲是对StringBuffer的一个优化,但StringBuffer的toString是有Synchronized修饰。

因此,StringBuffer和StringBuilder各打五十大板。

总结

如果整理来看,StringBuilder和StringBuffer各有优缺点,也就各打五十大板。

如果我们在不同场合使用不同的,就可以发挥其的优点。

适合的场合

StringBuffer 适合 : 多线程

StringBuilder 适合 : 单线程

参考文章

  1. StringBuffer 和 StringBuilder 的 3 个区别

 历史上的今天

  1. 2023: Date常用格式转换(0条评论)
  2. 2019: 卢梭:生活在大自然的怀抱里(0条评论)
  3. 2018: 开机动画文件制作以及注意事项(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

钱钟书:论快乐

在旧书铺里买回来维尼(vigny)的《诗人日记》(journaldunpote),信手翻开,就看见有趣的一条。他说,在法语里,喜乐(bonheur)一个名词是“好”和“钟点”两字拼成,可见好事多磨,只是个把钟头的玩意儿。我们联想到我们本国话的说法,也同样的意味深长,譬如快活或快乐的快字,就把人生一切...

JNI之自定义对象使用

前言Java中存在自定义对象的,因此JNI是要考虑传入自定义对象的使用。记录一下,方便自己查阅和学习。正文这里定义一个Staff类,传入JNI中打印和冲JNI中创建返回给Java。还是在之前动态注册的基础上改。如果没有基础,可以看看《JNI动态注册》Staff.java# @站长pa...

[摘]车载MediaSession框架理解

前言本文内容主要介绍Android车载多媒体开发MediaSession框架知识,而且内容是阅读参考文的笔记。记录于此,方便自己查阅。好记性不如烂笔头。正文这里摘抄我自己想了解的,而且只是记录一下,有兴趣的还是看原文,多谢理解。Android AutoAndroid Auto就是...

Android之获取图片高宽方法的简单记录

前言本文非原创,大佬的基础上进行修改和调试,下面三种方式我都测试过。感谢大佬们分享。好记性不如烂笔头总结如果只获取高宽,推荐使用BitmapFactory.Options如果要加载图片和获取高宽,推荐使用Glide如果只是加载jpg图片,可以考虑ExifInterface,否则不推荐...

JNI异常的使用

前言JNI中也存在异常,如果出现异常不处理就会让程序崩溃。因此JNI中定义了异常相关函数用于处理异常。下面就介绍一写常用的异常处理函数。正文Throw# env : JNI接口指针# obj : 一个java.lang.Throwable对象# 如果成功时返回0;失败时为负值jint...

[摘]SeekBar的thumbOffset属性

Android的控件SeekBar中有个android:thumbOffset的属性,这个属性的作用是指示thumb(滑块)在拖动条的进度最大值与最小值时相对于拖动条的偏移量。thumbOffset值1、thumbOffset:0px最小值时thumb位置:thumb的最左端与SeekBar的...