文档章节

我们需要StringBuffer么?

lateron
 lateron
发布于 2013/05/09 12:25
字数 425
阅读 81
收藏 0

这些天的工作中,一直在不停的拼字符串,所以较多的使用了StringBuffer这个类,昨天没事看了看自己的代码,突然想到面试时经常被问到的StringBuffer和StringBuilder的区别,脑子里只是有个大概的印象,一个是线程安全的,一个是线程不安全的。

当然我也随手点进去看了看StringBuffer的源代码,随便看了两个常用的方法:append和toString。他们都在方法上做了同步:

public synchronized String toString() {
return new String(value, 0, count);
 }

我立马意识到自己使用StringBuffer是多么大的一个失误,因为我使用StringBuffer的场景都是把他用作局部变量,根本不会有线程安全的问题,所以我立马将代码中所有的StringBuffer替换为StringBuilder。改完了,回来再仔细想想,StringBuffer这个类还有必要存在么?我觉得我们完全可以忽略他的存在,直接使用StringBuilder,原因如下:

1.我们使用StringBuffer的大多数场景都是线程安全的。

2.即使我们把StringBuffer当共享变量,StringBuffer本身提供的同步还是远远不能保证线程安全,比如我们经常会这么写:

StringBuffer sb = new StringBuffer();
public void addRule(String name) {
          sb.append(name).append("\n");
}

即使 StringBuffer保证了append的安全性,但是上面的例子还是线程不安全的。

所以在大多数情况下,StringBuffer的线程安全是完全没有意义的,我们完全可以用StringBuilder替换。那为什么JDK的源代码中还是有较多的地方使用StringBuffer了?我们可以看看这篇文章

© 著作权归作者所有

lateron

lateron

粉丝 172
博文 57
码字总数 44492
作品 1
海淀
私信 提问
Java深究之String、StringBuffer、StringBuilder的区别

在Java学习中,String、StringBuffer、StringBuilder三者是很重要的,在编写代码中经常使用到他们,那么深入的了解他们的异同是非常重要的,接下里我们详细剖析下这三个的异同之处 首先总结下...

MaxBill
2018/07/02
197
0
java-----string stringbuffer stringwriter

string 是Java参数传递(by value)造成的,是不可变的(immutable).,例如 基本类型,String传值,复制了值传递过去;可变的(Object)传值,复制了引用传递过去。 String a = "a";//假设a指向地...

风林火山
2011/01/10
985
0
StringBuilder和StringBuffer(转的)

在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,...

郁极风
2016/05/20
78
0
【翻译】Java中String, StringBuffer, StringBuilder的区别

String 是 Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会用String定义一些内容,然后通过著名的System.out.println()语句来打印出来。 然而,很多Java新手都不会意识到 String...

YuanyuanL
2014/09/03
457
4
Stringbuffer源码分析

本文用于分析当创建StringBuffer对象后,调用append方法时,StringBuffer内部是如何扩容的 1、创建StringBuffer对象,并调用append方法,这是我们开发时经常做的 StringBuffer sb = new Stri...

嘿嘿嘿IT
06/13
3
0

没有更多内容

加载失败,请刷新页面

加载更多

【2019年8月版本】OCP 071认证考试最新版本的考试原题-第13题

Choose the best answer. Examine this query: SELECT TRUNC (ROUND(156.00,-2),-1) FROM DUAL; What is the result? A) 16 B) 160 C) 150 D) 200 E) 100 Answer:D (解析:关键就是 round ......

oschina_5359
30分钟前
5
0
SolrJ 操作solr增删改查

Solr的特性包括: • 高级的全文搜索功能 • 专为高通量的网络流量进行的优化 • 基于开放接口(XML和HTTP)的标准 • 综合的HTML管理界面 • 可伸缩性-能够有效地复制到另外一个Solr搜索服...

雷开你的门
32分钟前
5
0
What’s the easiest way to teach a robot arm to stack blocks?

What’s the easiest way to teach a robot arm to stack blocks? That’s the nuanced question to which researchers at Google parent company Alphabet’s DeepMind sought answers dur......

巧克夹心
33分钟前
4
0
Vuex-dev demo npm install 时总是报phantomjs-prebuilt@2.1.14安装失败

解决方法,删除node_modules,package-lock.json以及package.json里面的 phantomjs-prebuilt。然后 npm install,最后安装phantomjs-prebuilt。 npm install phantomjs-prebuilt@2.1.14 --ig......

牧云橙
35分钟前
7
0
理解自定义starter的主要目的

自定义starter的主要功能是自动帮我们将某个JavaBean转换成SpringBean,在这个过程中,有些类的实例化会依赖其他的类,考虑到是否需要交给Spring管理,会有很多注解来辅助boot是否是实例化该...

redis缓存
42分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部