文档章节

String 与 StringBuilder、StringBuffer区别

l
 linyaohua
发布于 2016/03/29 18:10
字数 411
阅读 8
收藏 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
2018/01/01
0
0
String,StringBuilder,StringBuffer对比

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

Real_man
2018/03/20
0
0
StringBuffer 和 StringBuilder 的 3 个区别

StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反...

Java技术栈
今天
0
0
Java深究之String、StringBuffer、StringBuilder的区别

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

MaxBill
2018/07/02
0
0
StringBuilder VS StringBuffer

问题 代码中的字符串拼接,又让我纠结了。到底该用StringBuilder,StringBuffer? 区别 is synchronized, is not. StringBuffer是同步的,StringBuilder是异步的。再看看文档: A mutable se...

亚林瓜子
2017/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深度学习为图片人物换装【python代码教程】

在观看本文之前,请答应我要善良。昨天预告了下,发现很多同学对这个模型都表示出兴趣,甚至有好多同学后台发来照片让我帮他们脱裤子。授人以鱼不如授人以渔,请这些同学好自为之~ 01效果演示...

阿里云官方博客
27分钟前
2
0
centos7安装RabbitMQ详细过程

由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang 1、环境: centos 7.1 内核版本3.10.0-229.el7.x86_64 Erlang 19.0.4版本 RabbitMQ 3.6.14版本 2、在线安装E...

秋至丶枫以落
58分钟前
1
0
6个使用KeePassX保护密码的技巧

虽然安全是个深奥的主题,但是你可以遵循几个简单的日常习惯来减小攻击面。本文将解释确保密码信息安全的重要性,并给出如何充分利用KeePassX的建议。 日益互联的数字世界使安全成为一个重要...

Linux就该这么学
今天
1
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
今天
5
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部