文档章节

String 与 StringBuilder、StringBuffer区别

l
 linyaohua
发布于 2016/03/29 18:10
字数 411
阅读 7
收藏 0

String

String 类使用char[]存储字符,并在char[]用final标识,所以String对象一经创建长度就是固定的不可变的了;

public final char value[];

StringBuilder、StringBuffer

共同继承abstractStringBuilder类,用public char value[];装载字符串,所以数组长度是可变的,可通过Capacity设置数组长度,一旦字符长度超出容量,数组长度会自动翻倍扩展。EnsureCapacity检查当前value[]宽度。

此外,StringBuffer在abstractStringBuilder之外添加了同步锁,所以StringBuffrer是线程安全的。


从执行效率上比较,执行速度是StringBuilder>StringBufer>String,所以当数据量小的时候,可以用较小的时候可以选择使用String,数据量较大且保证线程安全的情况下(如IO),使用StringBuffer,若不需要支持线程安全,从速度方面考虑,应该使用StringBuilder.

为什么StringBuilder、StringBuffer在性能上跟String有区别呢?

String a = “abc”;

a+="efg";

实际上,上面这两条语句,创建了三个String对象“abc”,“efg”,"abcefg".

String str = new String(“abc”)+new String("abc");

则创建了4个String对象,首先创建一个“abc”对象用于存储“abc”,然后new 了一个String 对象,第二个new String("abc"),由于已经存在“abc”对象,所以不需要重新创建,但是此时又new了一个对象,最后创建一个String对象用于存储结果,所以一共创建了4个String对象。

由此可见,不断地创建String在性能上肯定会有影响的。

而StringBuffer与StringBuilder则始终操作一个String对象,只是对长度有所调整就可以了。

© 著作权归作者所有

共有 人打赏支持
l
粉丝 0
博文 5
码字总数 3006
作品 0
广州
私信 提问
java中String、StringBuffer、StringBuilder的区别 - jihite

java中String、StringBuffer、StringBuilder的区别 - jihite 博客园jihite2018-01-011 阅读 StringBufferjavaString Java里面提供了String,StringBuffer和StringBuilder三个类来封装字符串 ......

博客园_jihite
01/01
0
0
String,StringBuilder,StringBuffer对比

简述 StringBuilder 对比 StringBuffer StringBuilder是非线程安全 StringBuffer是线程安全的。 StringBuilder和StringBuffer其余的特性都是一样的,他们与String的区别: StringBuilder与S...

Real_man
03/20
0
0
【翻译】Java中String, StringBuffer, StringBuilder的区别

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

YuanyuanL
2014/09/03
0
4
LearnJava(三)String、StringBuffer 与 StringBuilder

  我们知道,String对象是不可变的,而Java中String类提供了“+”进行字符串拼接操作,从JDK1.5开始,字符串的拼接操作是通过StringBuffer类来完成的。 上述代码的实际实现过程是:   也...

laughter_jiang
07/29
0
0
Java深究之String、StringBuffer、StringBuilder的区别

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

MaxBill
07/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ+PHP 教程三(Publish/Subscribe)用yii2测试通过

介绍 在前面的教程中,我们创建了一个工作队列。工作队列背后的假设是每个任务都交付给一个工作人员处理。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者发送消息。此模式...

hansonwong
23分钟前
2
0
关于JAVA你必须知道的那些事(四):单例模式和多态

好吧,今天一定要把面向对象的最后一个特性:多态,给说完。不过我们先来聊一聊设计模式,因为它很重要。 设计模式 官方的解释是,设计模式是:一套被反复使用,多数人知晓的,经过分类编目,...

拾光TM
23分钟前
1
0
ES6 系列之 Babel 是如何编译 Class 的(下)

摘要: ## 前言 在上一篇 [《 ES6 系列 Babel 是如何编译 Class 的(上)》](https://github.com/mqyqingfeng/Blog/issues/105),我们知道了 Babel 是如何编译 Class 的,这篇我们学习 Babel ...

阿里云官方博客
24分钟前
1
0
附实例!实现iframe父窗体与子窗体的通信

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本...

腾讯云加社区
30分钟前
1
0
JSP页面传List集合到Action中

1:JSP页面(前端用的是H-UI框架) <div class="codeView docs-example"> <table class="table table-border table-bordered table-striped"> <thead> ......

uug
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部