StringBuffer 和 StringBuilder 的 3 个区别!
StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。
这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反,搞不清使用场景的情况。
今天,栈长我带大家彻底搞懂 StringBuffer 和 StringBuilder 的几个区别和它们的应用场景,如果你是大牛,请略过,如果你是菜鸟,或者对这两个不是很清楚,可以学习一下,也可以为年底的面试加油冲刺。
先看看 StringBuffer 和 StringBuilder 的类结构吧:
其实很简单,就是继承了一个抽象的字符串父类:AbstractStringBuilder
。下面我们再来看看它们的三个区别。
区别1:线程安全
StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 StringBuilder 修饰。
StringBuffer 代码片段:
@Override
public synchronized StringBuffer append(String str) {toStringCache = null;super.append(str);return this;
}
区别2:缓冲区
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 arrayreturn new String(value, 0, count);
}
可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。
区别3:性能
既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。
总结
所以,StringBuffer 适用于用在多线程操作同一个 StringBuffer 的场景,如果是单线程场合 StringBuilder 更适合。
以此送给正在面试或者即将去面试的 Java 程序猿们,如果对你有帮助,也欢迎分享给身边的朋友们,让大家少走弯路。
StringBuffer 和 StringBuilder 的 3 个区别!相关推荐
- StringBuffer 和 StringBuilder 的 3 个区别
2019独角兽企业重金招聘Python工程师标准>>> StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现 ...
- StringBuffer与StringBuilder的作用与区别
来自为知笔记(Wiz) 转载于:https://www.cnblogs.com/wang3680/p/c414ab02085dea1cfe44f45f9b28a7b7.html
- Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
String:字符串常量,字符串长度不可变,StringBuffer:字符串变量(Synchronized,即线程安全),StringBuilder:字符串变量(非线程安全). String Stri ...
- String , StringBuffer 和 StringBuilder 区别
转载:http://www.blogjava.net/chenpengyi/archive/2006/05/04/44492.html 相信大家对 String 和 StringBuffer 的区别也 ...
- String,StringBuffer和StringBuilder区别?
String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer ...
- 1.19 String、StringBuffer和StringBuilder类的区别
在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至 ...
- php 有 stringbuffer,string,stringbuffer以及stringbuilder的区别
string,stringbuffer以及stringbuilder的区别? 小编在一次电话面试中,被问过StringBuilder是线程安全的吗,脱口而出是安全的,结果人家质疑我你是2年开发经验吗. ...
- JavaSE(二十五)——String与StringBuffer、StringBuilder的区别、创建对象的几种方法、Http和Https的区别
文章目录 1. String与StringBuffer.StringBuilder的区别 2. Java创建对象的几种方法 3. Http和Https的区别 1. String与StringBuffe ...
- String,StringBuffer与StringBuilder的区别
String,StringBuffer与StringBuilder的区别 String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全 ...
最新文章
- 王者争雄服务器维护,王者争雄_王者争雄官网_攻略-第一手游网
- 手工安装kubernetes
- 香蕉派路由功Openwrt、Android功耗对照測试
- 《数据库SQL实战》查找入职员工时间排名倒数第三的员工的所有信息
- Cheatsheet: 2010 04.26 ~ 04.30
- 查看目录是否为内存盘_Linux buff/cache内存释放
- L1-017 到底有多二 (15 分)
- 虚拟机网络模式与网络配置
- Windows Terminal Preview 1.5 发布
- ajax点击a load,jQuery:在ajax load()之后运行脚本
- HDU 2186--
- strong,weak, retain, assign的区别@property的参数
- openai-gpt_为什么GPT-3感觉像是编程
- Python教你实现微信防撤回~
- win7下桌面IE快捷方式无法删除解决方法
- 常用遥感SIF和GPP数据集
- 【pytorch图像分类】AlexNet网络结构
- 进阶篇:4.1)DFA设计指南:简化产品设计(kiss原则)
- oracle中书写规范,oracle sql书写规范
- 不去摄影棚,不用PS三步快速证件照换底色最简单方式